]> granicus.if.org Git - icu/commitdiff
ICU-20831 clone capitalizationBrkIter for actual use
authorPeter Edberg <pedberg@unicode.org>
Thu, 26 Sep 2019 01:17:03 +0000 (18:17 -0700)
committerpedberg-icu <42151464+pedberg-icu@users.noreply.github.com>
Thu, 26 Sep 2019 18:18:39 +0000 (11:18 -0700)
icu4j/main/classes/core/src/com/ibm/icu/text/SimpleDateFormat.java

index 7cf6a545415df77afa16ba730c2996ae5d60aea4..090e9564cfa7174313c421c430534e3726ec0f23 100644 (file)
@@ -925,7 +925,7 @@ public class SimpleDateFormat extends DateFormat {
     private volatile TimeZoneFormat tzFormat;
 
     /**
-     * BreakIterator to use for capitalization
+     * BreakIterator to use for capitalization (will be cloned for actual use)
      */
     private transient BreakIterator capitalizationBrkIter = null;
 
@@ -2078,8 +2078,11 @@ public class SimpleDateFormat extends DateFormat {
                     // should only happen when deserializing, etc.
                     capitalizationBrkIter = BreakIterator.getSentenceInstance(locale);
                 }
+                // Note, the call to UCharacter.toTitleCase below is the only place that
+                // (the clone of) capitalizationBrkIter is actually used.
+                BreakIterator mutableCapitalizationBrkIter = (BreakIterator)capitalizationBrkIter.clone();
                 String firstField = buf.substring(bufstart); // bufstart or beginOffset, should be the same
-                String firstFieldTitleCase = UCharacter.toTitleCase(locale, firstField, capitalizationBrkIter,
+                String firstFieldTitleCase = UCharacter.toTitleCase(locale, firstField, mutableCapitalizationBrkIter,
                                                      UCharacter.TITLECASE_NO_LOWERCASE | UCharacter.TITLECASE_NO_BREAK_ADJUSTMENT);
                 buf.replace(bufstart, buf.length(), firstFieldTitleCase);
             }