mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-07 06:25:30 +00:00
ICU-21449 Infinite loop can occur with locale IDs that contain RES_PATH_SEPARATOR
This commit is contained in:
parent
b82dc88148
commit
8082d0e145
3 changed files with 17 additions and 2 deletions
|
@ -1908,6 +1908,8 @@ ures_getByKeyWithFallback(const UResourceBundle *resB,
|
|||
} else {
|
||||
break;
|
||||
}
|
||||
} else if (res == RES_BOGUS) {
|
||||
break;
|
||||
}
|
||||
} while(*myPath); /* Continue until the whole path is consumed */
|
||||
}
|
||||
|
|
|
@ -280,6 +280,7 @@ void addLocaleTest(TestNode** root)
|
|||
TESTCASE(TestBug20370);
|
||||
TESTCASE(TestBug20321UnicodeLocaleKey);
|
||||
TESTCASE(TestUsingDefaultWarning);
|
||||
TESTCASE(TestBug21449InfiniteLoop);
|
||||
}
|
||||
|
||||
|
||||
|
@ -6978,11 +6979,12 @@ static void TestUsingDefaultWarning() {
|
|||
log_err("ERROR: in uloc_getDisplayKeywordValue %s %s return len:%d %s with status %d %s\n",
|
||||
keyword_value, keyword, length, errorOutputBuff, status, myErrorName(status));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Test case for ICU-20575
|
||||
// This test checks if the environment variable LANG is set,
|
||||
// and if so ensures that both C and C.UTF-8 cause ICU's default locale to be en_US_POSIX.
|
||||
static void TestCDefaultLocale(){
|
||||
static void TestCDefaultLocale() {
|
||||
const char *defaultLocale = uloc_getDefault();
|
||||
char *env_var = getenv("LANG");
|
||||
if (env_var == NULL) {
|
||||
|
@ -6993,3 +6995,13 @@ static void TestCDefaultLocale(){
|
|||
log_err("The default locale for LANG=%s should be en_US_POSIX, not %s\n", env_var, defaultLocale);
|
||||
}
|
||||
}
|
||||
|
||||
// Test case for ICU-21449
|
||||
static void TestBug21449InfiniteLoop() {
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
const char* invalidLocaleId = RES_PATH_SEPARATOR_S;
|
||||
|
||||
// The issue causes an infinite loop to occur when looking up a non-existent resource for the invalid locale ID,
|
||||
// so the test is considered passed if the call to the API below returns anything at all.
|
||||
uloc_getDisplayLanguage(invalidLocaleId, invalidLocaleId, NULL, 0, &status);
|
||||
}
|
||||
|
|
|
@ -142,6 +142,7 @@ static void TestToUnicodeLocaleType(void);
|
|||
static void TestToLegacyType(void);
|
||||
static void TestBug20149(void);
|
||||
static void TestCDefaultLocale(void);
|
||||
static void TestBug21449InfiniteLoop(void);
|
||||
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue