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