package TestApache::read; use strict; use warnings FATAL => 'all'; use Apache2::RequestRec (); use Apache2::RequestIO (); use TestCommon::Utils; use Apache2::Const -compile => 'OK'; use constant BUFSIZ => 512; #small for testing sub handler { my $r = shift; $r->content_type('text/plain'); my $cl = $r->headers_in->get('content-length'); my $buffer = ""; my $bufsiz = $r->args || BUFSIZ; my $offset = 0; while (my $remain = $cl - $offset) { my $len = $remain >= $bufsiz ? $bufsiz : $remain; my $read = $r->read($buffer, $len, $offset); if ($read != $len) { die "read only ${read}b, while ${len}b were requested\n"; } last unless $read > 0; $offset += $read; } die "read() has returned untainted data:" unless TestCommon::Utils::is_tainted($buffer); # make sure we dont block after all data is read my $n = $r->read(my $x, BUFSIZ); die unless $n == 0; $r->puts($buffer); Apache2::Const::OK; } 1;