--- icu.orig/source/common/uloc.c 2007-12-12 13:57:24.000000000 -0500 +++ icu/source/common/uloc.c 2012-01-21 19:54:19.603574549 -0500 @@ -1716,7 +1716,7 @@ /* Check for EURO variants. */ sawEuro = _deleteVariant(variant, uprv_min(variantSize, (nameCapacity-len)), "EURO", 4); len -= sawEuro; - if (sawEuro > 0 && name[len-1] == '_') { /* delete trailing '_' */ + if (sawEuro > 0 && len > 0 && len <= nameCapacity && name[len-1] == '_') { /* delete trailing '_' */ --len; }