jsdever 2003/02/07 17:12:15 Modified: httpclient/src/java/org/apache/commons/httpclient HttpConnection.java HttpMethodBase.java Log: Fix for bug 16846 Bug: http://nagoya.apache.org/bugzilla/show_bug.cgi?id=16864 changeLog: - now requires the a "\r\n" be present as a pair to terminate the line - if the end of stream is read before a \n\r is found, the data read up untill that point will be returned - minimize the number of checks in the read loop to try and speed it up a bit Contributed by: Jeff Dever Revision Changes Path 1.41 +18 -19 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpConnection.java Index: HttpConnection.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpConnection.java,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- HttpConnection.java 31 Jan 2003 23:23:13 -0000 1.40 +++ HttpConnection.java 8 Feb 2003 01:12:15 -0000 1.41 @@ -101,7 +101,7 @@ * @author Rod Waldhoff * @author Sean C. Sullivan * @author Ortwin Glück - * @author Jeff Dever + * @author <a href="mailto:[EMAIL PROTECTED]">Jeff Dever</a> * @author <a href="mailto:[EMAIL PROTECTED]">Mike Bowler</a> * @author <a href="mailto:[EMAIL PROTECTED]">Oleg Kalnichevski</a> * @@ -873,6 +873,9 @@ /** * Read up to <tt>"\r\n"</tt> from my (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. * * @throws IllegalStateException if I am not connected * @throws IOException if an I/O problem occurs @@ -883,25 +886,21 @@ assertOpen(); StringBuffer buf = new StringBuffer(); - while (true) { - int ch = inputStream.read(); - if (ch < 0) { - if (buf.length() == 0) { - return null; - } else { + int ch = inputStream.read(); + while (ch >= 0) { + if (ch == '\r') { + ch = inputStream.read(); + if (ch == '\n') { break; + } else { + buf.append('\r'); } - } else if (ch == '\r') { - // LOG.debug("HttpConnection.readLine() found \\r, continuing"); - continue; - } else if (ch == '\n') { - // LOG.debug("HttpConnection.readLine() found \\n, breaking"); - break; } buf.append((char) ch); + ch = inputStream.read(); } - if (WIRE_LOG.isDebugEnabled() && buf.length() > 0) { - WIRE_LOG.debug("<< \"" + buf.toString() + "\" [\\r\\n]"); + if (WIRE_LOG.isDebugEnabled()) { + WIRE_LOG.debug("<< \"" + buf.toString() + (ch>0 ? "\" [\\r\\n]" : "")); } return (buf.toString()); } 1.109 +11 -7 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java Index: HttpMethodBase.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v retrieving revision 1.108 retrieving revision 1.109 diff -u -r1.108 -r1.109 --- HttpMethodBase.java 2 Feb 2003 04:30:13 -0000 1.108 +++ HttpMethodBase.java 8 Feb 2003 01:12:15 -0000 1.109 @@ -1910,8 +1910,7 @@ */ protected void readStatusLine(HttpState state, HttpConnection conn) throws IOException, HttpRecoverableException, HttpException { - LOG.trace( - "enter HttpMethodBase.readStatusLine(HttpState, HttpConnection)"); + LOG.trace("enter HttpMethodBase.readStatusLine(HttpState, HttpConnection)"); //read out the HTTP status string String statusString = conn.readLine(); @@ -2166,6 +2165,7 @@ /** * Sets the specified response header. + * Logs a warning if the header name is null. * * @param header the header to set. * @@ -2175,7 +2175,11 @@ if (header == null) { return; } - responseHeaders.put(header.getName().toLowerCase(), header); + if (header.getName() == null) { + LOG.warn("Invalid header found"); + } else { + responseHeaders.put(header.getName().toLowerCase(), header); + } } /**
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]