Author: olegk Date: Wed Jun 1 13:04:58 2005 New Revision: 179411 URL: http://svn.apache.org/viewcvs?rev=179411&view=rev Log: PR #35050 (ProtocolException thrown on slightly broken headers)
Contributed by Oleg Kalnichevski Reviewed by Michael Becke Modified: jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/HttpParser.java jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestHttpParser.java Modified: jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/HttpParser.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/HttpParser.java?rev=179411&r1=179410&r2=179411&view=diff ============================================================================== --- jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/HttpParser.java (original) +++ jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/HttpParser.java Wed Jun 1 13:04:58 2005 @@ -163,7 +163,7 @@ StringBuffer value = null; for (; ;) { String line = HttpParser.readLine(is, charset); - if ((line == null) || (line.length() < 1)) { + if ((line == null) || (line.trim().length() < 1)) { break; } Modified: jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestHttpParser.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestHttpParser.java?rev=179411&r1=179410&r2=179411&view=diff ============================================================================== --- jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestHttpParser.java (original) +++ jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestHttpParser.java Wed Jun 1 13:04:58 2005 @@ -76,4 +76,50 @@ assertEquals("stuff", HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET)); assertEquals(null, HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET)); } + + public void testReadWellFormedHttpHeaders() throws Exception { + InputStream instream = new ByteArrayInputStream( + "a: a\r\nb: b\r\n\r\nwhatever".getBytes(HTTP_ELEMENT_CHARSET)); + Header[] headers = HttpParser.parseHeaders(instream, HTTP_ELEMENT_CHARSET); + assertNotNull(headers); + assertEquals(2, headers.length); + assertEquals("a", headers[0].getName()); + assertEquals("a", headers[0].getValue()); + assertEquals("b", headers[1].getName()); + assertEquals("b", headers[1].getValue()); + } + + public void testReadMalformedHttpHeaders() throws Exception { + InputStream instream = new ByteArrayInputStream( + "a: a\r\nb b\r\n\r\nwhatever".getBytes(HTTP_ELEMENT_CHARSET)); + try { + Header[] headers = HttpParser.parseHeaders(instream, HTTP_ELEMENT_CHARSET); + fail("HttpException should have been thrown"); + } catch (HttpException expected) { + } + } + + public void testHeadersTerminatorLeniency1() throws Exception { + InputStream instream = new ByteArrayInputStream( + "a: a\r\nb: b\r\n\r\r\nwhatever".getBytes(HTTP_ELEMENT_CHARSET)); + Header[] headers = HttpParser.parseHeaders(instream, HTTP_ELEMENT_CHARSET); + assertNotNull(headers); + assertEquals(2, headers.length); + assertEquals("a", headers[0].getName()); + assertEquals("a", headers[0].getValue()); + assertEquals("b", headers[1].getName()); + assertEquals("b", headers[1].getValue()); + } + + public void testHeadersTerminatorLeniency2() throws Exception { + InputStream instream = new ByteArrayInputStream( + "a: a\r\nb: b\r\n \r\nwhatever".getBytes(HTTP_ELEMENT_CHARSET)); + Header[] headers = HttpParser.parseHeaders(instream, HTTP_ELEMENT_CHARSET); + assertNotNull(headers); + assertEquals(2, headers.length); + assertEquals("a", headers[0].getName()); + assertEquals("a", headers[0].getValue()); + assertEquals("b", headers[1].getName()); + assertEquals("b", headers[1].getValue()); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]