Skip to content

Commit cf34a3e

Browse files
Do not add value of preceding HTTP header field if there is no value (or
only white space)
1 parent dfe1f62 commit cf34a3e

2 files changed

Lines changed: 26 additions & 2 deletions

File tree

src/main/java/org/archive/format/http/HttpHeaderParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,16 +301,16 @@ public ParseState handleByte(byte b, HttpHeaderParser parser) throws HttpParseEx
301301
if(isLWSP(b)) {
302302
return parser.postColonState;
303303
}
304+
// reset previous value also in case the header value is empty
305+
parser.setValueStartIdx();
304306
if(b == CR) {
305-
// TODO: THINK more...
306307
parser.valuePreCRState = parser.postColonState;
307308
return parser.valuePostCRState;
308309
}
309310
if(b == LF) {
310311
// TODO: this is lax, is LFLF an OK terminator?
311312
return parser.lineStartState;
312313
}
313-
parser.setValueStartIdx();
314314
parser.addValueByte(b);
315315
return parser.valueState;
316316
}

src/test/java/org/archive/format/http/HttpResponseParserTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,28 @@ public void testParseWithLf() throws IOException {
5757

5858
}
5959

60+
public void testParseEmptyHeaderField() throws IOException {
61+
62+
HttpResponseParser parser = new HttpResponseParser();
63+
String message = "200 OK\r\nContent-Type: text/plain\r\nServer: \r\n\r\nHi there";
64+
try {
65+
HttpResponse response =
66+
parser.parse(new ByteArrayInputStream(message.getBytes(IAUtils.UTF8)));
67+
assertNotNull(response);
68+
HttpHeaders headers = response.getHeaders();
69+
assertNotNull(headers);
70+
assertEquals(2, headers.size());
71+
HttpHeader header = headers.get(1);
72+
assertEquals("Server",header.getName());
73+
System.err.println(header.getValue());
74+
assertFalse("text/plain".equals(header.getValue()));
75+
TestUtils.assertStreamEquals(response, "Hi there".getBytes(IAUtils.UTF8));
76+
77+
} catch (HttpParseException e) {
78+
e.printStackTrace();
79+
fail();
80+
}
81+
82+
}
83+
6084
}

0 commit comments

Comments
 (0)