DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6141>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6141 read() function failing in HttpServletRequest InputStream Summary: read() function failing in HttpServletRequest InputStream Product: Tomcat 4 Version: 4.0 Beta 1 Platform: Other OS/Version: Linux Status: NEW Severity: Normal Priority: Other Component: Catalina AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] There definitely appears to be an error in the InputStream which is gained from the HttpServletRequest. If the bytes are read from the data stream using the read function it returns bytes larger than 127 as negative values i.e. as for signed bytes. This is a direct contravention of the JDK specification which states that these values should be in the range of 0 to 255. This has a flow on effect on other functions. For example if a stream of bytes is received by the stream the other read functions will read to the first value which is hex 0xFF and then falsly indicate that the stream is closed. I have briefly looked at the code and cannot fault it however the return of the read value is clearly -ve. I believe this may be why Bug 5827 is occuring. Code snipit in the servlet which exhibits this behaviour byte [] byteBuff = new byte [ 4096 ] ; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Get the input stream from the request InputStream in = request.getInputStream ( ) ; // Tell the log what the data length is log ( "Content Available bytes: " + request.getContentLength() ) ; // Read the data into the buffer readInputSingly ( in, byteBuff, request.getContentLength() ) ; } protected void readInputSingly ( InputStream input, byte [] data, int dataLength ) throws java.io.IOException { int offset = 0 ; int dataByte ; log ( "Reading bytes" ) ; while ( offset < dataLength ) { dataByte = input.read ( ) ; if ( (dataByte < 0) ) { log ( "The data value is negative: " + dataByte ) ; } else { log ( "Byte: " + Integer.toHexString ( dataByte ) ) ; data [ offset ] = (byte)dataByte ; offset ++ ; } } } -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>