Index: net/http/http_util_unittest.cc |
=================================================================== |
--- net/http/http_util_unittest.cc (revision 1706) |
+++ net/http/http_util_unittest.cc (working copy) |
@@ -124,6 +124,241 @@ |
{ "HTTP/1.0 200 OK\nFoo: 1\nBar: 2\n\n", |
"HTTP/1.0 200 OK|Foo: 1|Bar: 2||" }, |
+ |
+ // Valid line continuation (single SP). |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Foo: 1\n" |
+ " continuation\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Foo: 1 continuation|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Valid line continuation (single HT). |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Foo: 1\n" |
+ "\tcontinuation\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Foo: 1\tcontinuation|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Valid line continuation (multiple SP). |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Foo: 1\n" |
+ " continuation\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Foo: 1 continuation|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Valid line continuation (multiple HT). |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Foo: 1\n" |
+ "\t\t\tcontinuation\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Foo: 1\t\t\tcontinuation|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Valid line continuation (mixed HT, SP). |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Foo: 1\n" |
+ " \t \t continuation\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Foo: 1 \t \t continuation|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Valid multi-line continuation |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Foo: 1\n" |
+ " continuation1\n" |
+ "\tcontinuation2\n" |
+ " continuation3\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Foo: 1 continuation1\tcontinuation2 continuation3|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Valid line continuation (No value bytes in first line). |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Foo:\n" |
+ " value\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Foo: value|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Not a line continuation (can't continue status line). |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ " Foo: 1\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ " Foo: 1|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Not a line continuation (can't continue status line). |
+ { |
+ "HTTP/1.0\n" |
+ " 200 OK\n" |
+ "Foo: 1\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0|" |
+ " 200 OK|" |
+ "Foo: 1|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Not a line continuation (can't continue status line). |
+ { |
+ "HTTP/1.0 404\n" |
+ " Not Found\n" |
+ "Foo: 1\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 404|" |
+ " Not Found|" |
+ "Foo: 1|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Unterminated status line. |
+ { |
+ "HTTP/1.0 200 OK", |
+ |
+ "HTTP/1.0 200 OK||" |
+ }, |
+ |
+ // Single terminated, with headers |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Foo: 1\n" |
+ "Bar: 2\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Foo: 1|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Not terminated, with headers |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Foo: 1\n" |
+ "Bar: 2", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Foo: 1|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Not a line continuation (VT) |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Foo: 1\n" |
+ "\vInvalidContinuation\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Foo: 1|" |
+ "\vInvalidContinuation|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Not a line continuation (formfeed) |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Foo: 1\n" |
+ "\fInvalidContinuation\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Foo: 1|" |
+ "\fInvalidContinuation|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Not a line continuation -- can't continue header names. |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Serv\n" |
+ " er: Apache\n" |
+ "\tInvalidContinuation\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Serv|" |
+ " er: Apache|" |
+ "\tInvalidContinuation|" |
+ "Bar: 2||" |
+ }, |
+ |
+ // Not a line continuation -- no value to continue. |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ "Foo: 1\n" |
+ "garbage\n" |
+ " not-a-continuation\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ "Foo: 1|" |
+ "garbage|" |
+ " not-a-continuation|" |
+ "Bar: 2||", |
+ }, |
+ |
+ // Not a line continuation -- no valid name. |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ ": 1\n" |
+ " garbage\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ ": 1|" |
+ " garbage|" |
+ "Bar: 2||", |
+ }, |
+ |
+ // Not a line continuation -- no valid name (whitespace) |
+ { |
+ "HTTP/1.0 200 OK\n" |
+ " : 1\n" |
+ " garbage\n" |
+ "Bar: 2\n\n", |
+ |
+ "HTTP/1.0 200 OK|" |
+ " : 1|" |
+ " garbage|" |
+ "Bar: 2||", |
+ }, |
+ |
}; |
for (size_t i = 0; i < arraysize(tests); ++i) { |
int input_len = static_cast<int>(strlen(tests[i].input)); |