src/java.base/share/classes/java/util/zip/CRC32.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
8076112 Cdiff src/java.base/share/classes/java/util/zip/CRC32.java
src/java.base/share/classes/java/util/zip/CRC32.java
Print this page
*** 24,34 ****
--- 24,37 ----
*/
package java.util.zip;
import java.nio.ByteBuffer;
+ import java.util.Objects;
+
import sun.nio.ch.DirectBuffer;
+ import jdk.internal.HotSpotIntrinsicCandidate;
/**
* A class that can be used to compute the CRC-32 of a data stream.
*
* <p> Passing a {@code null} argument to a method in this class will cause
*** 121,131 ****
@Override
public long getValue() {
return (long)crc & 0xffffffffL;
}
private native static int update(int crc, int b);
- private native static int updateBytes(int crc, byte[] b, int off, int len);
! private native static int updateByteBuffer(int adler, long addr,
int off, int len);
}
--- 124,174 ----
@Override
public long getValue() {
return (long)crc & 0xffffffffL;
}
+ @HotSpotIntrinsicCandidate
private native static int update(int crc, int b);
! private static int updateBytes(int crc, byte[] b, int off, int len) {
! updateBytesCheck(b, off, len);
! return updateBytes0(crc, b, off, len);
! }
!
! @HotSpotIntrinsicCandidate
! private native static int updateBytes0(int crc, byte[] b, int off, int len);
!
! private static void updateBytesCheck(byte[] b, int off, int len) {
! if (len <= 0) {
! return; // not an error because updateBytesImpl won't execute if len <= 0
! }
!
! Objects.requireNonNull(b);
!
! if (off < 0 || off >= b.length) {
! throw new ArrayIndexOutOfBoundsException(off);
! }
!
! int endIndex = off + len - 1;
! if (endIndex < 0 || endIndex >= b.length) {
! throw new ArrayIndexOutOfBoundsException(endIndex);
! }
! }
!
! private static int updateByteBuffer(int alder, long addr,
! int off, int len) {
! updateByteBufferCheck(addr);
! return updateByteBuffer0(alder, addr, off, len);
! }
!
! @HotSpotIntrinsicCandidate
! private native static int updateByteBuffer0(int alder, long addr,
int off, int len);
+
+ private static void updateByteBufferCheck(long addr) {
+ // Performs only a null check because bounds checks
+ // are not easy to do on raw addresses.
+ if (addr == 0L) {
+ throw new NullPointerException();
+ }
+ }
}
src/java.base/share/classes/java/util/zip/CRC32.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File