[ 
https://issues.apache.org/jira/browse/HADOOP-3640?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tom White updated HADOOP-3640:
------------------------------

    Attachment: hadoop-3640.patch

Patch to make this change. Interestingly, this is not causing a problem since 
the NativeS3FsInputStream (which is a private class) is always wrapped in 
BufferedFSInputStream. BufferedFSInputStream actually never calls read() (the 
single byte version) on the underlying stream, even from its implementation of 
read(), since it uses the buffered version.

> NativeS3FsInputStream read() method for reading a single byte is incorrect
> --------------------------------------------------------------------------
>
>                 Key: HADOOP-3640
>                 URL: https://issues.apache.org/jira/browse/HADOOP-3640
>             Project: Hadoop Core
>          Issue Type: Bug
>    Affects Versions: 0.18.0
>            Reporter: Tom White
>            Assignee: Tom White
>         Attachments: hadoop-3640.patch
>
>
> From Albert Chern:
> I think there may be a bug in the read() method of NativeS3InputStream, which 
> looks like this:
> {code}
> public synchronized int read() throws IOException {
>     int result = in.read();
>     if (result > 0) {
>         pos += result;
>     }
>     return result;
> }
> {code}
> The return value of InputStream.read() should be the next byte in the range 0 
> to 255, or -1 if there are no more bytes.  So shouldn't this method look 
> something like this?
> {code}
> public synchronized int read() throws IOException {
>     int result = in.read();
>     if (result > -1) {
>         pos ++;
>     }
>     return result;
> }
> {code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to