blob: 8b90c99ee5955b627fb5e76e01506d6982249114 [file] [log] [blame]
# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
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;