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]

Reply via email to