Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cherry-pick: ICU-21449 Infinite loop can occur with locale IDs that c…
…ontain RES_PATH_SEPARATOR (#66) This change cherry-picks the upstream fix for the issue of an infinite loop when calling various APIs with locale IDs that contain `RES_PATH_SEPARATOR`. Upstream ticket: https://unicode-org.atlassian.net/browse/ICU-21449 Upstream PR: unicode-org/icu#1549 Detailed Description (from the upstream PR): When calling APIs like `uloc_getDisplayLanguage`, if the input locale ID has `/` (the `RES_PATH_SEPARATOR` value) then the resource look-up code ends up in an infinite loop. For example, the following code will never return: ```c++ UErrorCode status = U_ZERO_ERROR; const char* localeNameTemp = "/"; // RES_PATH_SEPARATOR uloc_getDisplayLanguage(localeNameTemp, localeNameTemp, NULL, 0, &status); ``` The `do {...} while` loop in `ures_getByKeyWithFallback` calls `res_findResource`, but it never checks to see if the returned resource is `RES_BOGUS`, meaning that for some paths it will never terminate. (Thanks to am11 for doing the initial investigation into this issue.) This PR also includes a test case for the issue. Note that there is nothing really "tested" by the test case, as the test is to simply ensure that calling the API doesn't cause a hang due to the infinite loop.
- Loading branch information