[OpenJDK 2D-Dev] [9] request for review: 8074954: ImageInputStreamImpl.readShort/readInt do not behave correctly at EOF

Phil Race philip.race at oracle.com
Fri Mar 20 17:56:48 UTC 2015


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.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20150320/bd965098/attachment.html>


More information about the 2d-dev mailing list