8223730: URLClassLoader.findClass() can throw IndexOutOfBoundsException
Reviewed-by: prappo, bchristi
--- a/src/java.base/share/classes/jdk/internal/loader/Resource.java Tue May 14 08:47:13 2019 +0800
+++ b/src/java.base/share/classes/jdk/internal/loader/Resource.java Mon May 13 18:18:42 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -113,9 +113,11 @@
int bytesToRead;
if (pos >= b.length) { // Only expand when there's no room
bytesToRead = Math.min(len - pos, b.length + 1024);
- if (b.length < pos + bytesToRead) {
- b = Arrays.copyOf(b, pos + bytesToRead);
+ if (bytesToRead < 0) {
+ // Can overflow only due to large b.length
+ bytesToRead = len - pos;
}
+ b = Arrays.copyOf(b, pos + bytesToRead);
} else {
bytesToRead = b.length - pos;
}