mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 14:24:46 +02:00
8343984: Fix Unsafe address overflow
Reviewed-by: pminborg, alanb
This commit is contained in:
parent
168b18ec68
commit
0dab920b70
11 changed files with 34 additions and 34 deletions
|
@ -830,22 +830,22 @@ final class StringLatin1 {
|
|||
static void putCharsAt(byte[] val, int index, int c1, int c2, int c3, int c4) {
|
||||
assert index >= 0 && index + 3 < length(val) : "Trusted caller missed bounds check";
|
||||
// Don't use the putChar method, Its instrinsic will cause C2 unable to combining values into larger stores.
|
||||
long address = Unsafe.ARRAY_BYTE_BASE_OFFSET + index;
|
||||
UNSAFE.putByte(val, address , (byte)(c1));
|
||||
UNSAFE.putByte(val, address + 1, (byte)(c2));
|
||||
UNSAFE.putByte(val, address + 2, (byte)(c3));
|
||||
UNSAFE.putByte(val, address + 3, (byte)(c4));
|
||||
long offset = (long) Unsafe.ARRAY_BYTE_BASE_OFFSET + index;
|
||||
UNSAFE.putByte(val, offset , (byte)(c1));
|
||||
UNSAFE.putByte(val, offset + 1, (byte)(c2));
|
||||
UNSAFE.putByte(val, offset + 2, (byte)(c3));
|
||||
UNSAFE.putByte(val, offset + 3, (byte)(c4));
|
||||
}
|
||||
|
||||
static void putCharsAt(byte[] val, int index, int c1, int c2, int c3, int c4, int c5) {
|
||||
assert index >= 0 && index + 4 < length(val) : "Trusted caller missed bounds check";
|
||||
// Don't use the putChar method, Its instrinsic will cause C2 unable to combining values into larger stores.
|
||||
long address = Unsafe.ARRAY_BYTE_BASE_OFFSET + index;
|
||||
UNSAFE.putByte(val, address , (byte)(c1));
|
||||
UNSAFE.putByte(val, address + 1, (byte)(c2));
|
||||
UNSAFE.putByte(val, address + 2, (byte)(c3));
|
||||
UNSAFE.putByte(val, address + 3, (byte)(c4));
|
||||
UNSAFE.putByte(val, address + 4, (byte)(c5));
|
||||
long offset = (long) Unsafe.ARRAY_BYTE_BASE_OFFSET + index;
|
||||
UNSAFE.putByte(val, offset , (byte)(c1));
|
||||
UNSAFE.putByte(val, offset + 1, (byte)(c2));
|
||||
UNSAFE.putByte(val, offset + 2, (byte)(c3));
|
||||
UNSAFE.putByte(val, offset + 3, (byte)(c4));
|
||||
UNSAFE.putByte(val, offset + 4, (byte)(c5));
|
||||
}
|
||||
|
||||
public static void putChar(byte[] val, int index, int c) {
|
||||
|
|
|
@ -174,7 +174,7 @@ class ZipUtils {
|
|||
Preconditions.checkIndex(off, b.length, Preconditions.AIOOBE_FORMATTER);
|
||||
Preconditions.checkIndex(off + 1, b.length, Preconditions.AIOOBE_FORMATTER);
|
||||
return Short.toUnsignedInt(
|
||||
UNSAFE.getShortUnaligned(b, off + Unsafe.ARRAY_BYTE_BASE_OFFSET, false));
|
||||
UNSAFE.getShortUnaligned(b, off + (long) Unsafe.ARRAY_BYTE_BASE_OFFSET, false));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -185,7 +185,7 @@ class ZipUtils {
|
|||
Preconditions.checkIndex(off, b.length, Preconditions.AIOOBE_FORMATTER);
|
||||
Preconditions.checkIndex(off + 3, b.length, Preconditions.AIOOBE_FORMATTER);
|
||||
return Integer.toUnsignedLong(
|
||||
UNSAFE.getIntUnaligned(b, off + Unsafe.ARRAY_BYTE_BASE_OFFSET, false));
|
||||
UNSAFE.getIntUnaligned(b, off + (long) Unsafe.ARRAY_BYTE_BASE_OFFSET, false));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -195,7 +195,7 @@ class ZipUtils {
|
|||
public static final long get64S(byte[] b, int off) {
|
||||
Preconditions.checkIndex(off, b.length, Preconditions.AIOOBE_FORMATTER);
|
||||
Preconditions.checkIndex(off + 7, b.length, Preconditions.AIOOBE_FORMATTER);
|
||||
return UNSAFE.getLongUnaligned(b, off + Unsafe.ARRAY_BYTE_BASE_OFFSET, false);
|
||||
return UNSAFE.getLongUnaligned(b, off + (long) Unsafe.ARRAY_BYTE_BASE_OFFSET, false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -206,7 +206,7 @@ class ZipUtils {
|
|||
public static final int get32S(byte[] b, int off) {
|
||||
Preconditions.checkIndex(off, b.length, Preconditions.AIOOBE_FORMATTER);
|
||||
Preconditions.checkIndex(off + 3, b.length, Preconditions.AIOOBE_FORMATTER);
|
||||
return UNSAFE.getIntUnaligned(b, off + Unsafe.ARRAY_BYTE_BASE_OFFSET, false);
|
||||
return UNSAFE.getIntUnaligned(b, off + (long) Unsafe.ARRAY_BYTE_BASE_OFFSET, false);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue