@@ -1067,7 +1067,13 @@ class AliasReplacer {
1067
1067
public:
1068
1068
AliasReplacer (UErrorCode status) :
1069
1069
language (nullptr ), script(nullptr ), region(nullptr ),
1070
- extensions (nullptr ), variants(status),
1070
+ extensions (nullptr ),
1071
+ // store value in variants only once
1072
+ variants (nullptr ,
1073
+ ([](UElement e1 , UElement e2 ) -> UBool {
1074
+ return 0 ==uprv_strcmp ((const char *)e1 .pointer ,
1075
+ (const char *)e2 .pointer );}),
1076
+ status),
1071
1077
data (nullptr ) {
1072
1078
}
1073
1079
~AliasReplacer () {
@@ -1653,10 +1659,16 @@ AliasReplacer::replace(const Locale& locale, CharString& out, UErrorCode& status
1653
1659
while ((end = uprv_strchr (start, SEP_CHAR)) != nullptr &&
1654
1660
U_SUCCESS (status)) {
1655
1661
*end = NULL_CHAR; // null terminate inside variantsBuff
1656
- variants.addElement (start, status);
1662
+ // do not add "" or duplicate data to variants
1663
+ if (*start && !variants.contains (start)) {
1664
+ variants.addElement (start, status);
1665
+ }
1657
1666
start = end + 1 ;
1658
1667
}
1659
- variants.addElement (start, status);
1668
+ // do not add "" or duplicate data to variants
1669
+ if (*start && !variants.contains (start)) {
1670
+ variants.addElement (start, status);
1671
+ }
1660
1672
}
1661
1673
if (U_FAILURE (status)) { return false ; }
1662
1674
0 commit comments