]> granicus.if.org Git - icu/commitdiff
ICU-20370 Fix error checking in uloc_getLCID function.
authorJeff Genovy <29107334+jefgen@users.noreply.github.com>
Tue, 22 Jan 2019 00:52:15 +0000 (16:52 -0800)
committerJeff Genovy <29107334+jefgen@users.noreply.github.com>
Thu, 24 Jan 2019 23:00:03 +0000 (15:00 -0800)
icu4c/source/common/uloc.cpp
icu4c/source/test/cintltst/cloctst.c

index 3827457e982a41108e44f4e4abfe0a02a690523c..6b65c626222f863a122489c992acdabec56320fe 100644 (file)
@@ -2191,7 +2191,7 @@ uloc_getLCID(const char* localeID)
     }
 
     uloc_getLanguage(localeID, langID, sizeof(langID), &status);
-    if (U_FAILURE(status)) {
+    if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING) {
         return 0;
     }
 
index 41f6d915e899ad7c2c2088953a7a32968d68b314..2268486a9f16d2f9098d2f8ddb9e6a9817a55e71 100644 (file)
@@ -52,6 +52,7 @@ static void TestUnicodeDefines(void);
 
 static void TestIsRightToLeft(void);
 static void TestBadLocaleIDs(void);
+static void TestBug20370(void);
 
 void PrintDataTable();
 
@@ -266,6 +267,7 @@ void addLocaleTest(TestNode** root)
     TESTCASE(TestToUnicodeLocaleType);
     TESTCASE(TestToLegacyType);
     TESTCASE(TestBadLocaleIDs);
+    TESTCASE(TestBug20370);
 }
 
 
@@ -6498,3 +6500,13 @@ static void TestBadLocaleIDs() {
         }
     }
 }
+
+// Test case for ICU-20370.
+// The issue shows as an Addresss Sanitizer failure.
+static void TestBug20370() {
+    const char *localeID = "x-privatebutreallylongtagfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar";
+    uint32_t lcid = uloc_getLCID(localeID);
+    if (lcid != 0) {
+        log_err("FAIL: Expected LCID value of 0 for invalid localeID input.");
+    }
+}