зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1373763: Extend scope for local variable in uprv_convertToPosix. r=dmajor
--HG-- extra : rebase_source : 7664d67626d00c17e7f2d46277a8dd7605b52eb9
This commit is contained in:
Родитель
d2643cda87
Коммит
7be99b0beb
|
@ -0,0 +1,34 @@
|
||||||
|
Move the stack allocated buffer to the top-level, so its value can be accessed after the if-statement.
|
||||||
|
|
||||||
|
https://ssl.icu-project.org/trac/ticket/13263
|
||||||
|
|
||||||
|
diff --git a/intl/icu/source/common/locmap.cpp b/intl/icu/source/common/locmap.cpp
|
||||||
|
--- a/intl/icu/source/common/locmap.cpp
|
||||||
|
+++ b/intl/icu/source/common/locmap.cpp
|
||||||
|
@@ -1028,24 +1028,25 @@ U_CAPI int32_t
|
||||||
|
uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UErrorCode* status)
|
||||||
|
{
|
||||||
|
uint16_t langID;
|
||||||
|
uint32_t localeIndex;
|
||||||
|
UBool bLookup = TRUE;
|
||||||
|
const char *pPosixID = NULL;
|
||||||
|
|
||||||
|
#ifdef USE_WINDOWS_LCID_MAPPING_API
|
||||||
|
+ char locName[LOCALE_NAME_MAX_LENGTH] = {}; // ICU name can't be longer than Windows name
|
||||||
|
+
|
||||||
|
// Note: Windows primary lang ID 0x92 in LCID is used for Central Kurdish and
|
||||||
|
// GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for
|
||||||
|
// Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot
|
||||||
|
// use the Windows API to resolve locale ID for this specific case.
|
||||||
|
if ((hostid & 0x3FF) != 0x92) {
|
||||||
|
int32_t tmpLen = 0;
|
||||||
|
UChar windowsLocaleName[LOCALE_NAME_MAX_LENGTH]; // ULOC_FULLNAME_CAPACITY > LOCALE_NAME_MAX_LENGTH
|
||||||
|
- char locName[LOCALE_NAME_MAX_LENGTH]; // ICU name can't be longer than Windows name
|
||||||
|
|
||||||
|
// Note: LOCALE_ALLOW_NEUTRAL_NAMES was enabled in Windows7+, prior versions did not handle neutral (no-region) locale names.
|
||||||
|
tmpLen = LCIDToLocaleName(hostid, (PWSTR)windowsLocaleName, UPRV_LENGTHOF(windowsLocaleName), LOCALE_ALLOW_NEUTRAL_NAMES);
|
||||||
|
if (tmpLen > 1) {
|
||||||
|
int32_t i = 0;
|
||||||
|
// Only need to look up in table if have _, eg for de-de_phoneb type alternate sort.
|
||||||
|
bLookup = FALSE;
|
||||||
|
for (i = 0; i < UPRV_LENGTHOF(locName); i++)
|
|
@ -1033,6 +1033,8 @@ uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UEr
|
||||||
const char *pPosixID = NULL;
|
const char *pPosixID = NULL;
|
||||||
|
|
||||||
#ifdef USE_WINDOWS_LCID_MAPPING_API
|
#ifdef USE_WINDOWS_LCID_MAPPING_API
|
||||||
|
char locName[LOCALE_NAME_MAX_LENGTH] = {}; // ICU name can't be longer than Windows name
|
||||||
|
|
||||||
// Note: Windows primary lang ID 0x92 in LCID is used for Central Kurdish and
|
// Note: Windows primary lang ID 0x92 in LCID is used for Central Kurdish and
|
||||||
// GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for
|
// GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for
|
||||||
// Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot
|
// Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot
|
||||||
|
@ -1040,7 +1042,6 @@ uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UEr
|
||||||
if ((hostid & 0x3FF) != 0x92) {
|
if ((hostid & 0x3FF) != 0x92) {
|
||||||
int32_t tmpLen = 0;
|
int32_t tmpLen = 0;
|
||||||
UChar windowsLocaleName[LOCALE_NAME_MAX_LENGTH]; // ULOC_FULLNAME_CAPACITY > LOCALE_NAME_MAX_LENGTH
|
UChar windowsLocaleName[LOCALE_NAME_MAX_LENGTH]; // ULOC_FULLNAME_CAPACITY > LOCALE_NAME_MAX_LENGTH
|
||||||
char locName[LOCALE_NAME_MAX_LENGTH]; // ICU name can't be longer than Windows name
|
|
||||||
|
|
||||||
// Note: LOCALE_ALLOW_NEUTRAL_NAMES was enabled in Windows7+, prior versions did not handle neutral (no-region) locale names.
|
// Note: LOCALE_ALLOW_NEUTRAL_NAMES was enabled in Windows7+, prior versions did not handle neutral (no-region) locale names.
|
||||||
tmpLen = LCIDToLocaleName(hostid, (PWSTR)windowsLocaleName, UPRV_LENGTHOF(windowsLocaleName), LOCALE_ALLOW_NEUTRAL_NAMES);
|
tmpLen = LCIDToLocaleName(hostid, (PWSTR)windowsLocaleName, UPRV_LENGTHOF(windowsLocaleName), LOCALE_ALLOW_NEUTRAL_NAMES);
|
||||||
|
|
|
@ -71,6 +71,7 @@ for patch in \
|
||||||
bug-1172609-timezone-recreateDefault.diff \
|
bug-1172609-timezone-recreateDefault.diff \
|
||||||
bug-1198952-workaround-make-3.82-bug.diff \
|
bug-1198952-workaround-make-3.82-bug.diff \
|
||||||
u_setMemoryFunctions-callconvention-anachronism-msvc.diff \
|
u_setMemoryFunctions-callconvention-anachronism-msvc.diff \
|
||||||
|
bug-1373763-convertToPosix-stack-value-out-of-scope.diff \
|
||||||
; do
|
; do
|
||||||
echo "Applying local patch $patch"
|
echo "Applying local patch $patch"
|
||||||
patch -d ${icu_dir}/../../ -p1 --no-backup-if-mismatch < ${icu_dir}/../icu-patches/$patch
|
patch -d ${icu_dir}/../../ -p1 --no-backup-if-mismatch < ${icu_dir}/../icu-patches/$patch
|
||||||
|
|
Загрузка…
Ссылка в новой задаче