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;
