geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rick McGuire (JIRA)" <>
Subject [jira] Assigned: (GERONIMO-4307) Base64DecoderStream return int value between -128 and +127, should be between +0 and +255
Date Wed, 17 Sep 2008 10:41:44 GMT


Rick McGuire reassigned GERONIMO-4307:

    Assignee: Rick McGuire

> Base64DecoderStream return int value between -128 and +127, should be between +0 and
> -----------------------------------------------------------------------------------------
>                 Key: GERONIMO-4307
>                 URL:
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: specs
>    Affects Versions: 2.1.1
>         Environment: Geronimo 2.1.1 running on Ubuntu 7.10, Sun Java 1.5.
>            Reporter: Andrew
>            Assignee: Rick McGuire
> The documentation for InputStream specifies the following:
> Reads the next byte of data from the input stream. The value byte is returned as an int
in the range 0 to 255. If no byte is available because the end of the stream has been reached,
the value -1 is returned. This method blocks until input data is available, the end of the
stream is detected, or an exception is thrown.
> A subclass must provide an implementation of this method. 
> Note the second sentence. As Base64DecoderStream extends FilterInputStream, which in
turn extends InputStream, it should be adhering to that.
> However, it currently returns a byte directly, and because Java is a bit strange, it
will do sign extension (I think that's the term?), so a byte of -1 will become an int of -1
as well, as opposed to an int of 255. As you might imagine, this causes all sorts of interesting
problems when code tries to read the bytes from this stream and check for a negative value
to determine EOS.
> I imagine the fix for this is simply to change 
> public int read() throws IOException
>     {
>         return getByte();
>     }
> to read 
> public int read() throws IOException
>     {
>         return getByte() & 0xFF;
>     }
> Which is essentially what the Java class ByteArrayInputStream does.
> Unless there is a good reason for this behaviour?

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

View raw message