src/java.base/share/classes/sun/nio/cs/ISO_8859_1.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8076112 Cdiff src/java.base/share/classes/sun/nio/cs/ISO_8859_1.java

src/java.base/share/classes/sun/nio/cs/ISO_8859_1.java

Print this page

        

*** 30,39 **** --- 30,42 ---- import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; import java.nio.charset.CoderResult; import java.util.Arrays; + import java.util.Objects; + + import jdk.internal.HotSpotIntrinsicCandidate; class ISO_8859_1 extends Charset implements HistoricallyNamedCharset {
*** 145,156 **** return true; // we accept any byte value } private final Surrogate.Parser sgp = new Surrogate.Parser(); ! // JVM may replace this method with intrinsic code. private static int encodeISOArray(char[] sa, int sp, byte[] da, int dp, int len) { int i = 0; for (; i < len; i++) { char c = sa[sp++]; --- 148,166 ---- return true; // we accept any byte value } private final Surrogate.Parser sgp = new Surrogate.Parser(); ! // Method possible replaced with a compiler intrinsic. private static int encodeISOArray(char[] sa, int sp, + byte[] da, int dp, int len) { + encodeISOArrayCheck(sa, sp, da, dp, len); + return implEncodeISOArray(sa, sp, da, dp, len); + } + + @HotSpotIntrinsicCandidate + private static int implEncodeISOArray(char[] sa, int sp, byte[] da, int dp, int len) { int i = 0; for (; i < len; i++) { char c = sa[sp++];
*** 159,168 **** --- 169,206 ---- da[dp++] = (byte)c; } return i; } + private static void encodeISOArrayCheck(char[] sa, int sp, + byte[] da, int dp, int len) { + if (len <= 0) { + return; // not an error because encodeISOArrayImpl won't execute if len <= 0 + } + + Objects.requireNonNull(sa); + Objects.requireNonNull(da); + + if (sp < 0 || sp >= sa.length) { + throw new ArrayIndexOutOfBoundsException(sp); + } + + if (dp < 0 || dp >= da.length) { + throw new ArrayIndexOutOfBoundsException(dp); + } + + int endIndexSP = sp + len - 1; + if (endIndexSP < 0 || endIndexSP >= sa.length) { + throw new ArrayIndexOutOfBoundsException(endIndexSP); + } + + int endIndexDP = dp + len - 1; + if (endIndexDP < 0 || endIndexDP >= da.length) { + throw new ArrayIndexOutOfBoundsException(endIndexDP); + } + } + private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) { char[] sa = src.array(); int soff = src.arrayOffset();
src/java.base/share/classes/sun/nio/cs/ISO_8859_1.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File