Index: src/test/org/apache/commons/httpclient/TestHttpParser.java =================================================================== --- src/test/org/apache/commons/httpclient/TestHttpParser.java (revision 179389) +++ src/test/org/apache/commons/httpclient/TestHttpParser.java (working copy) @@ -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()); + } } Index: src/java/org/apache/commons/httpclient/HttpParser.java =================================================================== --- src/java/org/apache/commons/httpclient/HttpParser.java (revision 179389) +++ src/java/org/apache/commons/httpclient/HttpParser.java (working copy) @@ -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; }