]> granicus.if.org Git - icu/commitdiff
ICU-21994 Fix heap-buffer-overflow
authorFrank Tang <ftang@chromium.org>
Fri, 15 Apr 2022 18:47:25 +0000 (11:47 -0700)
committerFrank Yung-Fong Tang <ftang@google.com>
Wed, 20 Apr 2022 19:03:35 +0000 (12:03 -0700)
icu4c/source/common/locid.cpp

index 73bb8d8aec1c703852632e9a7c580f21eb1d9ca1..96d3851804d1e1355e8d733330878213c5b7ea72 100644 (file)
@@ -716,20 +716,19 @@ AliasDataBuilder::readAlias(
         status = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
-    int i = 0;
-    while (ures_hasNext(alias)) {
+    for (int i = 0; U_SUCCESS(status) && ures_hasNext(alias); i++) {
         LocalUResourceBundlePointer res(
             ures_getNextResource(alias, nullptr, &status));
         const char* aliasFrom = ures_getKey(res.getAlias());
         UnicodeString aliasTo =
             ures_getUnicodeStringByKey(res.getAlias(), "replacement", &status);
+        if (U_FAILURE(status)) return;
 
         checkType(aliasFrom);
         checkReplacement(aliasTo);
 
         rawTypes[i] = aliasFrom;
         rawIndexes[i] = strings->add(aliasTo, status);
-        i++;
     }
 }