# HG changeset patch # User mchung # Date 1290189608 28800 # Node ID 81f10887bf7429249602a1dc972327fe54367258 # Parent 32ac37aa93677a7d6cb998dc4abe55588914cf0b 6631046: BufferedInputStream.available() reports negative int on very large inputstream Reviewed-by: dholmes, alanb, mduigou diff -r 32ac37aa9367 -r 81f10887bf74 jdk/src/share/classes/java/io/BufferedInputStream.java --- a/jdk/src/share/classes/java/io/BufferedInputStream.java Fri Nov 19 13:35:07 2010 +0000 +++ b/jdk/src/share/classes/java/io/BufferedInputStream.java Fri Nov 19 10:00:08 2010 -0800 @@ -395,7 +395,11 @@ * or an I/O error occurs. */ public synchronized int available() throws IOException { - return getInIfOpen().available() + (count - pos); + int n = count - pos; + int avail = getInIfOpen().available(); + return n > (Integer.MAX_VALUE - avail) + ? Integer.MAX_VALUE + : n + avail; } /** diff -r 32ac37aa9367 -r 81f10887bf74 jdk/src/share/classes/java/io/PushbackInputStream.java --- a/jdk/src/share/classes/java/io/PushbackInputStream.java Fri Nov 19 13:35:07 2010 +0000 +++ b/jdk/src/share/classes/java/io/PushbackInputStream.java Fri Nov 19 10:00:08 2010 -0800 @@ -273,7 +273,11 @@ */ public int available() throws IOException { ensureOpen(); - return (buf.length - pos) + super.available(); + int n = buf.length - pos; + int avail = super.available(); + return n > (Integer.MAX_VALUE - avail) + ? Integer.MAX_VALUE + : n + avail; } /**