On 10/02/16 13:57, Aleksey Shipilev wrote:
....
Um (Integer.MAX_VALUE + 1L) is still a positive long, you probably want:
int ilen = (int)utflen;
if (ilen < 0)
return "";
int initialCapacity = Math.min(ilen, 16384);
...or:
if (utflen < 0 || utflen > Integer.MAX_INT)
return "";
int initialCapacity = Math.min((int)utflen, 16384);
Thanks Aleksey, your proposal is better. So the complete change is:
diff --git a/src/java.base/share/classes/java/io/ObjectInputStream.java
b/src/java.base/share/classes/java/io/ObjectInputStream.java
--- a/src/java.base/share/classes/java/io/ObjectInputStream.java
+++ b/src/java.base/share/classes/java/io/ObjectInputStream.java
@@ -3144,7 +3144,12 @@
* utflen bytes.
*/
private String readUTFBody(long utflen) throws IOException {
- StringBuilder sbuf = new StringBuilder();
+ if (utflen < 0 || utflen > Integer.MAX_VALUE)
+ return "";
+
+ // a reasonable initial capacity based on the UTF length
+ int initialCapacity = Math.min((int)utflen, 16384);
+ StringBuilder sbuf = new StringBuilder(initialCapacity);
if (!blkmode) {
end = pos = 0;
}
-Chris.