uprv_memcpy(language, fullName, fieldLen[0]);
language[fieldLen[0]] = 0;
}
- if (fieldLen[1] == 4) {
+ if (fieldLen[1] == 4 && uprv_isalpha(field[1][0]) &&
+ uprv_isalpha(field[1][1]) && uprv_isalpha(field[1][2]) &&
+ uprv_isalpha(field[1][3])) {
/* We have at least a script */
uprv_memcpy(script, field[1], fieldLen[1]);
script[fieldLen[1]] = 0;
variantField++;
}
- if (fieldLen[variantField] > 0 && fieldLen[variantField] <= (int32_t)(sizeof(country))) {
+ if (fieldLen[variantField] == 2 || fieldLen[variantField] == 3) {
/* We have a country */
uprv_memcpy(country, field[variantField], fieldLen[variantField]);
country[fieldLen[variantField]] = 0;
{"zh", "Hans", "", "PINYIN", "zh-Hans-pinyin", "zh_Hans_PINYIN", "zh_Hans@collation=pinyin"},
{"hy", "", "", "AREVMDA", "hy_AREVMDA", "hy_AREVMDA", NULL},
+ {"de", "", "", "1901", "de-1901", "de_1901", NULL},
{"mr", "", "", "", "mr.utf8", "mr.utf8", "mr"},
{"de", "", "TV", "", "de-tv.koi8r", "de_TV.koi8r", "de_TV"},
{"x-piglatin", "", "ML", "", "x-piglatin_ML.MBE", "x-piglatin_ML.MBE", "x-piglatin_ML"}, /* Multibyte English */
{"zh", "Hant", "TW", "STROKE", "zh-hant_TW_STROKE", "zh_Hant_TW_STROKE", "zh_Hant_TW@collation=stroke"},
{"qq", "Qqqq", "QQ", "QQ", "qq_Qqqq_QQ_QQ", "qq_Qqqq_QQ_QQ", NULL},
{"qq", "Qqqq", "", "QQ", "qq_Qqqq__QQ", "qq_Qqqq__QQ", NULL},
- {"12", "3456", "78", "90", "12_3456_78_90", "12_3456_78_90", NULL}, /* total garbage */
+ {"ab", "Cdef", "GH", "IJ", "ab_cdef_gh_ij", "ab_Cdef_GH_IJ", NULL}, /* total garbage */
{NULL,NULL,NULL,NULL,NULL,NULL,NULL}
};
if (0 != strcmp(loc5.getVariant(), "FOUR")) {
errln("FAIL: _Latn_US_FOUR didn't get parsed correctly - name is %s - expected %s got %s", loc5.getName(), "FOUR", loc5.getVariant());
}
+ Locale loc6("de-1901");
+ if (0 != strcmp(loc6.getVariant(), "1901")) {
+ errln("FAIL: de-1901 didn't get parsed correctly - name is %s - expected %s got %s", loc6.getName(), "1901", loc6.getVariant());
+ }
}
static Locale _canonicalize(int32_t selector, /* 0==createFromName, 1==createCanonical, 2==Locale ct */