The patch fixes RFC 822 non-compliant line termination problem reported by Carl A. Dunham
Cheers Oleg Index: java/org/apache/commons/httpclient/HttpMethodBase.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v retrieving revision 1.123 diff -u -r1.123 HttpMethodBase.java --- java/org/apache/commons/httpclient/HttpMethodBase.java 13 Mar 2003 17:51:28 -0000 1.123 +++ java/org/apache/commons/httpclient/HttpMethodBase.java 21 Mar 2003 13:52:16 -0000 @@ -1980,7 +1980,7 @@ + " \"HTTP/\""); } if (Wire.enabled()) { - Wire.input(statusString); + Wire.input(statusString + "\r\n"); } //create the status line from the status string statusLine = new StatusLine(statusString); Index: java/org/apache/commons/httpclient/HttpParser.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpParser.java,v retrieving revision 1.3 diff -u -r1.3 HttpParser.java --- java/org/apache/commons/httpclient/HttpParser.java 28 Feb 2003 12:48:58 -0000 1.3 +++ java/org/apache/commons/httpclient/HttpParser.java 21 Mar 2003 13:52:15 -0000 @@ -28,10 +28,10 @@ /** * Return byte array from an (unchunked) input stream. - * Stop reading when <tt>"\r\n"</tt> terminator encountered + * Stop reading when <tt>"\n"</tt> terminator encountered * If the stream ends before the line terminator is found, - * the last part of the string will still be returned. - * '\r' and '\n' are allowed to appear individually in the stream. + * the last part of the string will still be returned. + * If no input data available, <code>null</code> is returned * * @param inputStream the stream to read from * @@ -39,21 +39,14 @@ * @return a byte array from the stream */ public static byte[] readRawLine(InputStream inputStream) throws IOException { - LOG.trace("enter HttpConnection.readRawLine()"); + LOG.trace("enter HttpParser.readRawLine()"); ByteArrayOutputStream buf = new ByteArrayOutputStream(); int ch; while ((ch = inputStream.read()) >= 0) { buf.write(ch); - if (ch == '\r') { - ch = inputStream.read(); - if (ch < 0) { - break; - } - buf.write(ch); - if (ch == '\n') { - break; - } + if (ch == '\n') { + break; } } if (buf.size() == 0) { @@ -63,10 +56,10 @@ } /** - * Read up to <tt>"\r\n"</tt> from an (unchunked) input stream. + * Read up to <tt>"\n"</tt> from an (unchunked) input stream. * If the stream ends before the line terminator is found, * the last part of the string will still be returned. - * '\r' and '\n' are allowed to appear individually in the stream. + * If no input data available, <code>null</code> is returned * * @param inputStream the stream to read from * @@ -75,17 +68,24 @@ */ public static String readLine(InputStream inputStream) throws IOException { - LOG.trace("enter HttpConnection.readLine()"); + LOG.trace("enter HttpParser.readLine()"); byte[] rawdata = readRawLine(inputStream); if (rawdata == null) { return null; } int len = rawdata.length; - if (( len >= 2) && (rawdata[len - 2] == '\r') && (rawdata[len - 1] == '\n')) { - return HttpConstants.getString(rawdata, 0, rawdata.length - 2); - } else { - return HttpConstants.getString(rawdata); + int offset = 0; + if (len > 0) { + if (rawdata[len - 1] == '\n') { + offset++; + if (len > 1) { + if (rawdata[len - 2] == '\r') { + offset++; + } + } + } } + return HttpConstants.getString(rawdata, 0, len - offset); } /**
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]