ICU-21449 Infinite loop can occur with locale IDs that contain RES_PATH_SEPARATOR #1549
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When calling APIs like
uloc_getDisplayLanguage
, if the input locale ID has/
(theRES_PATH_SEPARATOR
value) then the resource look-up code ends up in an infinite loop.For example, the following code will never return:
The
do {...} while
loop inures_getByKeyWithFallback
callsres_findResource
, but it never checks to see if the returned resource isRES_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.
Checklist