|
|
|
@ -22,14 +22,14 @@ $t->{REQUEST} = ( <<EOF
|
|
|
|
|
GET /index%2ehtml HTTP/1.0 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'URL-encoding'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
|
GET /index.html%00 HTTP/1.0 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'URL-encoding, %00'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -41,7 +41,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: www.example.org |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'hostname'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -49,7 +49,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: 127.0.0.1 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'IPv4 address'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -57,7 +57,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: [::1] |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'IPv6 address'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -65,7 +65,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: www.example.org:80 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'hostname + port'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -73,7 +73,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: 127.0.0.1:80 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'IPv4 address + port'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -81,7 +81,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: [::1]:80 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'IPv6 address + port'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -89,7 +89,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: ../123.org |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'directory traversal'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -97,7 +97,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: .jsdh.sfdg.sdfg. |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'leading and trailing dot'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -105,7 +105,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: jsdh.sfdg.sdfg. |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'trailing dot is ok'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -113,7 +113,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: .jsdh.sfdg.sdfg |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'leading dot'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -122,7 +122,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: jsdh..sfdg.sdfg |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'two dots'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -130,7 +130,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: jsdh.sfdg.sdfg:asd |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'broken port-number'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -138,7 +138,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: jsdh.sfdg.sdfg:-1 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'negative port-number'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -147,7 +147,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: :80 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'port given but host missing'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -155,7 +155,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: .jsdh.sfdg.:sdfg. |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'port and host are broken'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -163,7 +163,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: a.b-c.d123 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'allowed characters in host-name'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -171,7 +171,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: -a.c |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'leading dash'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -179,7 +179,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: . |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'dot only'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -187,7 +187,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: a192.168.2.10:1234 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'broken IPv4 address - non-digit'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -195,7 +195,7 @@ GET / HTTP/1.0
|
|
|
|
|
Host: 192.168.2:1234 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'broken IPv4 address - too short'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -208,7 +208,7 @@ GET /index.html HTTP/1.0
|
|
|
|
|
Content-Length: -2 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'negative Content-Length'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -217,7 +217,7 @@ Host: 123.example.org
|
|
|
|
|
Content-Length: 2147483648 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 413 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 413 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'Content-Length > max-request-size'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
@ -226,7 +226,7 @@ Host: 123.example.org
|
|
|
|
|
Content-Length: |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 411 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 411 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'Content-Length is empty'); |
|
|
|
|
|
|
|
|
|
print "\nLow-Level Request-Header Parsing - HTTP/1.1\n"; |
|
|
|
@ -234,7 +234,7 @@ $t->{REQUEST} = ( <<EOF
|
|
|
|
|
GET / HTTP/1.1 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 400 } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 400 } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'Host missing'); |
|
|
|
|
|
|
|
|
|
print "\nContent-Type\n"; |
|
|
|
@ -242,21 +242,21 @@ $t->{REQUEST} = ( <<EOF
|
|
|
|
|
GET /image.jpg HTTP/1.0 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Type' => 'image/jpeg' } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Type' => 'image/jpeg' } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'Content-Type - image/jpeg'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
|
GET /image.JPG HTTP/1.0 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Type' => 'image/jpeg' } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Type' => 'image/jpeg' } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'Content-Type - image/jpeg'); |
|
|
|
|
|
|
|
|
|
$t->{REQUEST} = ( <<EOF |
|
|
|
|
GET /a HTTP/1.0 |
|
|
|
|
EOF |
|
|
|
|
); |
|
|
|
|
$t->{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Type' => 'application/octet-stream' } ); |
|
|
|
|
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Type' => 'application/octet-stream' } ]; |
|
|
|
|
ok($tf->handle_http($t) == 0, 'Content-Type - unknown'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|