]> granicus.if.org Git - icu/commitdiff
ICU-11342 cast CharBuffer to CharSequence before calling .subSequence()
authorMarkus Scherer <markus.icu@gmail.com>
Mon, 20 Oct 2014 21:08:42 +0000 (21:08 +0000)
committerMarkus Scherer <markus.icu@gmail.com>
Mon, 20 Oct 2014 21:08:42 +0000 (21:08 +0000)
X-SVN-Rev: 36682

icu4j/main/classes/core/src/com/ibm/icu/impl/ICUResourceBundleReader.java
icu4j/main/tests/charset/src/com/ibm/icu/dev/test/charset/TestCharset.java

index 1f3a075a283345f921f12dd6d2b2a6da7a192e17..938ac647bb06dbc3a0edfa76eaad173de64ff993 100644 (file)
@@ -646,7 +646,9 @@ public final class ICUResourceBundleReader {
                     length=((int)b16BitUnits.charAt(offset+1)<<16)|b16BitUnits.charAt(offset+2);
                     offset+=3;
                 }
-                s = b16BitUnits.subSequence(offset, offset + length).toString();
+                // Cast up to CharSequence to insulate against the CharBuffer.subSequence() return type change
+                // which makes code compiled for a newer JDK not run on an older one.
+                s = ((CharSequence) b16BitUnits).subSequence(offset, offset + length).toString();
             }
         } else {
             offset=getResourceByteOffset(offset);
index 6e11046a76e365493111c7422fc4793aa89390eb..b1452f1ab3335d69b79b11ff9b8894a5e363b65c 100644 (file)
@@ -2752,7 +2752,9 @@ public class TestCharset extends TestFmwk {
         };
         ByteBuffer bb = ByteBuffer.wrap(byteout);
         CharBuffer cb = CharBuffer.wrap(charin);
-        CharBuffer cb2 = CharBuffer.wrap(cb.subSequence(0, 2));
+        // Cast up to CharSequence to insulate against the CharBuffer.subSequence() return type change
+        // which makes code compiled for a newer JDK not run on an older one.
+        CharBuffer cb2 = CharBuffer.wrap(((CharSequence)cb).subSequence(0, 2));
         encoder.reset();
         if (!(encoder.encode(cb2, bb, true)).isOverflow()) {
             errln("Overflow error while encoding ASCII should have occurred.");