Right. It will be thrown on the next iteration.
The fix looks fine then.
20.03.15 20:56, Phil Race wrote:
I see. You were referring to the implementation. But your snippet
doesn't show the loop which should handle this case properly :
350 while (len > 0) {
351 int nbytes = read(b, off, len);
352 if (nbytes == -1) {
353 throw new EOFException();
354 }
355 off += nbytes;
356 len -= nbytes;
357 }
-phil.
On 03/20/2015 10:54 AM, Sergey Bylokhov wrote:
Andrew, The fix looks good to me.
Sergey, are you asking for that text to be added ? Looks to me like
its already there,
so probably I am not following what you mean.
No, readFully() has this code:
int nbytes = read(b, off, len);
if (nbytes == -1) {
throw new EOFException();
}
I assume this method should throw an exception if nbytes!=len as
described in the specification. same as readShort/readInt.
-phil.
On 03/20/2015 10:32 AM, Sergey Bylokhov wrote:
Hi, Andrew?
Hi, Andrew.
Should we update a readFully() also?
* @exception java.io.EOFException if the stream reaches the
end before
* reading all the bytes.
* @exception IOException if an I/O error occurs.
*/
void readFully(byte[] b, int off, int len) throws IOException;
20.03.15 14:30, Andrew Brygin wrote:
Hello,
could you please review a fix for CR 8074954?
Bug: https://bugs.openjdk.java.net/browse/JDK-8074954
Webrev: http://cr.openjdk.java.net/~bae/8074954/9/webrev.00/
The problem happens if an input stream does not contain enough data
to read a multi-byte type (as 4-bytes integer or 2-bytes short)
completely. In this case the actual number of obtained bytes is
returned, and if we get at least one byte, the EOF exception in
not triggered.
As a result, an incorrect value is returned.
Suggested fix is to check explicitly whether required number of
bytes
has been read.
Supplied regression test demonstrates the problem.
Please take a look.
Thanks,
Andrew.
--
Best regards, Sergey.
--
Best regards, Sergey.
--
Best regards, Sergey.