geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrew (JIRA)" <j...@apache.org>
Subject [jira] Created: (GERONIMO-4307) Base64DecoderStream return int value between -128 and +127, should be between +0 and +255
Date Wed, 17 Sep 2008 02:17:46 GMT
Base64DecoderStream return int value between -128 and +127, should be between +0 and +255
-----------------------------------------------------------------------------------------

                 Key: GERONIMO-4307
                 URL: https://issues.apache.org/jira/browse/GERONIMO-4307
             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


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.


Mime
View raw message