]> Sergey Matveev's repositories - public-inbox.git/commitdiff
t/httpd-corner: ensure chunk payload read doesn't overreach
authorEric Wong <e@80x24.org>
Thu, 20 Jun 2019 01:03:47 +0000 (01:03 +0000)
committerEric Wong <e@80x24.org>
Thu, 20 Jun 2019 01:16:03 +0000 (01:16 +0000)
It never has, AFAIK, but I'm making some changes to this code in
another branch and nearly introduced a bug where it would be
overreading and discarding the pipelined request.

t/httpd-corner.t

index 56e5a5bcda78744d6fea02e5664743da3b3ff92b..c1dc77dba9a3a5b89fa8420e9c66af962fa19e82 100644 (file)
@@ -123,6 +123,21 @@ my $spawn_httpd = sub {
        like($head, qr/\b413\b/, 'got 413 response');
 }
 
+{
+       my $conn = conn_for($sock, 'chunk with pipeline');
+       my $n = 10;
+       my $payload = 'b'x$n;
+       $conn->write("PUT /sha1 HTTP/1.1\r\nTransfer-Encoding: chunked\r\n");
+       $conn->write("\r\n".sprintf("%x\r\n", $n));
+       $conn->write($payload . "\r\n0\r\n\r\nGET /empty HTTP/1.0\r\n\r\n");
+       $conn->read(my $buf, 4096);
+       my $lim = 0;
+       $lim++ while ($conn->read($buf, 4096, bytes::length($buf)) && $lim < 9);
+       my $exp = sha1_hex($payload);
+       like($buf, qr!\r\n\r\n${exp}HTTP/1\.0 200 OK\r\n!s,
+               'chunk parser can handled pipelined requests');
+}
+
 # Unix domain sockets
 {
        my $u = IO::Socket::UNIX->new(Type => SOCK_STREAM, Peer => $upath);