diff --git a/src/system/libroot/add-ons/icu/ICULocaleBackend.cpp b/src/system/libroot/add-ons/icu/ICULocaleBackend.cpp index 7c9657a496..44986a0c83 100644 --- a/src/system/libroot/add-ons/icu/ICULocaleBackend.cpp +++ b/src/system/libroot/add-ons/icu/ICULocaleBackend.cpp @@ -88,6 +88,13 @@ ICULocaleBackend::SetLocale(int category, const char* posixLocaleName) return _SetPosixLocale(category); Locale locale = Locale::createCanonical(posixLocaleName); + + // Locale::create doesn't check validity, so make sure the locale + // has a real ISO-3166 language code to validate that it actually exists. + const char* iso3166 = locale.getISO3Language(); + if (iso3166 == NULL || iso3166[0] == '\0') + return NULL; + switch (category) { case LC_ALL: if (fCollateData.SetTo(locale, posixLocaleName) != B_OK