App-DubiousHTTP

 view release on metacpan or  search on metacpan

lib/App/DubiousHTTP/Tests/Chunked.pm  view on Meta::CPAN

	if ( m{^(x|-|nl|lf|cr)*chunked(x|-|nl|lf|cr)*$}i ) {
	    s{-}{ }g;
	    s{nl}{\r\n}g;
	    s{lf}{\n}g;
	    s{cr}{\r}g;
	    $hdr .= "Transfer-Encoding: $_\r\nConnection: close\r\n";
	} elsif ( $_ eq 'huge-white-space-chunked') {
	    $hdr .= "Transfer-Encoding: ". ( ' ' x 10000 )."chunked\r\nConnection: close\r\n";
	} elsif ( m{^(space|tab|cr|colon)-colon-chunked$} ) {
	    my $c = $1;
	    $c =~s{space}{ }g;
	    $c =~s{colon}{:}g;
	    $c =~s{tab}{\t}g;
	    $c =~s{cr}{\r}g;
	    $te = 'chunked';
	    $hdr .= "Connection: close\r\nTransfer-Encoding$c: chunked\r\n"
	} elsif ( my ($crlf) = m {^((?:lf|cr|x)+)only-chunked$} ) {
	    $te = 'chunked';
	    $hdr = "X-Foo: bar" if $hdr !~s{\r\n\z}{};
	    $crlf =~s{lf}{\n}g;
	    $crlf =~s{cr}{\r}g;
	    $hdr .= $crlf . "Transfer-Encoding: chunked\r\nConnection: close\r\n";
	} elsif ( $_ eq '1chunk' ) {
	    $hdr .= "Transfer-Encoding: chunked\r\n";
	    @chunks = $data;
	} elsif ( $_ eq 'chu' ) {
	    $hdr .= "Transfer-Encoding: chu\r\nConnection: close\r\n"
	} elsif ( $_ eq 'ce-chunked' ) {
	    $hdr .= "Content-Encoding: chunked\r\nConnection: close\r\n"
	} elsif ( $_ eq 'clen-big') {
	    $clen = 1_000_000_000;
	} elsif ( $_ =~ m{^clen(\d+)?$} ) {
	    $clen = $1 || 100;
	} elsif ( $_ eq 'http10' ) {
	    $version = "HTTP/1.0";
	} elsif ( $_ =~m{^HTTP/\S+}i ) {
	    $version = $_;
	} elsif ( $_ eq 'do_clen' ) {
	    $te = 'clen'
	} elsif ( $_ eq 'do_chunked' ) {
	    $te = 'chunked'
	} elsif ( $_ eq 'chunked-semicolon' ) {
	    $hdr .= "Transfer-Encoding: chunked;\r\nConnection: close\r\n"
	} elsif ( $_ eq 'rfc2047' ) {
	    $hdr .= "Transfer-Encoding: =?UTF-8?B?Y2h1bmtlZAo=?=\r\nConnection: close\r\n";
	} elsif ( $_ eq 'emptyte' ) {
	    $hdr .= "Transfer-Encoding: \r\nConnection: close\r\n";
	} elsif ( $_ eq 'xte' ) {
	    $hdr .= "Transfer-Encoding: lalala\r\nConnection: close\r\n";
	} elsif ( m{^junk(\S*)-after-chunkdata$}) {
	    my $junk = $1 // 'x';
	    $junk =~ s{\\([0-7]{3})}{ chr(oct($1)) }eg;
	    $hdr .= "Transfer-Encoding: chunked\r\nConnection: close\r\n";
	    $chunkmod{'junk-after-chunk'} = $junk;
	} elsif ( m{^size([+-])(\d+)$}) {
	    $hdr .= "Transfer-Encoding: chunked\r\nConnection: close\r\n";
	    $chunkmod{'size-adjust'} = int("$1$2");
	} elsif ( m{^(chunk-ext-|nofinal$|eof-inchunk$)} ) {
	    $hdr .= "Transfer-Encoding: chunked\r\nConnection: close\r\n";
	    $chunkmod{$_} = 1;
	} elsif ( my ($eol) = m{^chunk-((?:lf|cr)+)$} ) {
	    $hdr .= "Transfer-Encoding: chunked\r\nConnection: close\r\n";
	    $eol =~s{cr}{\r}g;
	    $eol =~s{lf}{\n}g;
	    $chunkmod{lineend} = $eol;
	} elsif (m{^(32|64)-size\z}) {
	    my $o = ($1 == 64) ? 'ffffffff':'';
	    $sizefmt = sub { sprintf("-$o%08x", 1+(0xffffffff & ~shift())) };
	    $hdr .= "Transfer-Encoding: chunked\r\nConnection: close\r\n";
	} elsif ( m{^(-|space|cr|lf|tab|x|\\[0-7]{3})*(0*)(uc)?size(-|space|cr|lf|tab|x|\\[0-7]{3})*$}) {
	    $hdr .= "Transfer-Encoding: chunked\r\nConnection: close\r\n";
	    @chunks = ( $data =~m{(.{1,15})}smg,'') if ! @chunks;
	    s{ucsize}{%X};
	    s{size}{%x};
	    s{\\r}{\r}g;
	    s{\\n}{\n}g;
	    s{-}{}g;
	    s{space}{ }g;
	    s{tab}{\t}g;
	    s{cr}{\r}g;
	    s{lf}{\n}g;
	    s{\\([0-7]{3})}{ chr(oct($1)) }eg;
	    $sizefmt = $_;
	} elsif (m{((?:space|tab|cr|lf)*)-before-chunks}) {
	    $hdr .= "Transfer-Encoding: chunked\r\nConnection: close\r\n";
	    $before_chunks = $1;
	    $before_chunks =~ s{space}{ }g;
	    $before_chunks =~ s{tab}{\t}g;
	    $before_chunks =~ s{cr}{\r}g;
	    $before_chunks =~ s{lf}{\n}g;
	} elsif (m{^final=(.*)$}) {
	    $hdr .= "Transfer-Encoding: chunked\r\nConnection: close\r\n";
	    $final = $1;
	} elsif (m{^finalchunk=(.*)$}) {
	    $hdr .= "Transfer-Encoding: chunked\r\nConnection: close\r\n";
	    (my $d = $1 ) =~ s{\\([0-7]{3})}{ chr(oct($1)) }eg;
	    $finalchunk = $d;
	} elsif ( $_ eq 'addjunk' ) {
	    # fake PKZIP magic for confusion
	    my $junk = "PK\003\004" x int(length($data)/4+1);
	    $data .= substr($junk,0,length($data));
	} elsif ( $_ eq 'gzip' ) {
	    $data = _compress($data,'gzip');
	    $hdr .= "Content-Encoding: gzip\r\n";
	} else {
	    die $_
	}
    }
    $hdr .= "Content-length: ". int($clen/100*length($data)) ."\r\n" 
	if defined $clen;
    $hdr = "$version 200 ok\r\n$hdr";
    $te ||= $hdr =~m{^Transfer-Encoding:}im ? 'chunked':'clen';
    @chunks = ( $data =~m{(.{1,5})}smg,'') if $te eq 'chunked' && ! @chunks;
    if (@chunks) {
	@chunks = map { [ length($_), $_ ] } @chunks;
	my $nl = $chunkmod{lineend} || "\r\n";
	if ($chunkmod{'chunk-ext-chunk'}) {
	    $_->[2] = sprintf("; %s  %x","x" x $_->[0],$_->[0]) for @chunks;
	} elsif ($chunkmod{'chunk-ext-junk'}) {
	    $_->[2] = "; foobar" for @chunks;
	}
	pop @chunks if $chunkmod{nofinal} && ! $chunks[-1][0];

	my $end = '';
	if ($chunkmod{'eof-inchunk'}) {



( run in 1.713 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )