From ce583af68915b83cfaa0bd4f1a2f49c92767bc8e Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Wed, 28 May 2014 08:52:52 +0200 Subject: Avoid undefined left shift of negative value Change-Id: If4e7f6fca3f6afbbeaa79e00706be08d674e2aeb --- i18nutil/source/utility/casefolding.cxx | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/i18nutil/source/utility/casefolding.cxx b/i18nutil/source/utility/casefolding.cxx index cbe7ea91b833..3fb7845afa66 100644 --- a/i18nutil/source/utility/casefolding.cxx +++ b/i18nutil/source/utility/casefolding.cxx @@ -79,12 +79,14 @@ Mapping& casefolding::getConditionalValue(const sal_Unicode* str, sal_Int32 pos, Mapping& casefolding::getValue(const sal_Unicode* str, sal_Int32 pos, sal_Int32 len, Locale& aLocale, sal_uInt8 nMappingType) throw (RuntimeException) { - static Mapping dummy = { 0, 1, { 0, 0, 0 } }; - sal_Int16 address = CaseMappingIndex[str[pos] >> 8] << 8; + static Mapping dummy = { 0, 1, { 0, 0, 0 } }; + sal_Int16 address = CaseMappingIndex[str[pos] >> 8]; - dummy.map[0] = str[pos]; + dummy.map[0] = str[pos]; - if (address >= 0 && (CaseMappingValue[address += (str[pos] & 0xFF)].type & nMappingType)) { + if (address >= 0) { + address = (address << 8) + (str[pos] & 0xFF); + if (CaseMappingValue[address].type & nMappingType) { sal_uInt8 type = CaseMappingValue[address].type; if (type & ValueTypeNotValue) { if (CaseMappingValue[address].value == 0) @@ -105,7 +107,8 @@ Mapping& casefolding::getValue(const sal_Unicode* str, sal_Int32 pos, sal_Int32 } else dummy.map[0] = CaseMappingValue[address].value; } - return dummy; + } + return dummy; } inline bool SAL_CALL -- cgit