App-DubiousHTTP

 view release on metacpan or  search on metacpan

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

use strict;
use warnings;
package App::DubiousHTTP::Tests::Clen;
use App::DubiousHTTP::Tests::Common;

SETUP(
    'clen',
    "playing with content-length",
    <<'DESC',
These tests look at the behavior if the content-length mismatches the content,
e.g. content is short or longer then specified length or contradicting 
content-lenth headers are given.
DESC

    # ------------------------ Tests -----------------------------------
    [ 'VALID: single or no content-length' ],
    [ MUSTBE_VALID, 'close,clen,content' => 'single content-length with connection close'],
    #[ VALID, 'keep-alive,clen,content' => 'single content-length with keep-alive'],
    [ MUSTBE_VALID, 'close,content' => 'no content-length with connection close'],
    [ UNCOMMON_INVALID, 'close,clen,content,junk' => 'single content-length, content followed by junk, then connection close'],
    [ UNCOMMON_INVALID, 'close,clen,clen,content,junk' => 'correct content-length twice, content followed by junk, then connection close'],
    [ UNCOMMON_VALID, 'close,000clen,content' => 'lots of 0 before clen' ],
    [ UNCOMMON_VALID, 'close,000clen,content,junk' => 'lots of 0 before clen, body content+junk' ],

    [ 'INVALID: content-length does not match content' ],
    [ INVALID, 'close,clen200,content' => 'content-length double real content, close after real content' ],
    [ INVALID, 'close,clen50,content' => 'content-length half real content, close after real content' ],

    [ 'INVALID: multiple conflicting content-length' ],
    [ INVALID, 'close,clen50,clen,content' => 'content-length half and full' ],
    [ INVALID, 'close,clen,clen50,content' => 'content-length full and half' ],
    [ INVALID, 'close,clen200,clen,content,junk' => 'content-length double and full, content followed by junk and close' ],
    [ INVALID, 'close,clen,clen200,content,junk' => 'content-length full and double, content followed by junk and close' ],
    [ INVALID, 'close,clen-folding100,clen200,content,junk' => 'content-length full (folded) and double' ],
    [ INVALID, 'close,xte,clen50,clen,content' => 'content-length half and full, invalid Transfer-Encoding' ],
    [ INVALID, 'close,xte,clen,clen50,content' => 'content-length full and half, invalid Transfer-Encoding' ],
    [ INVALID, 'close,xte,clen200,clen,content,junk' => 'content-length double and full, invalid Transfer-Encoding' ],
    [ INVALID, 'close,xte,clen,clen200,content,junk' => 'content-length full and double, invalid Transfer-Encoding' ],
    [ INVALID, 'close,xte,clen-folding100,clen200,content,junk' => 'content-length full (folded) and double, invalid Transfer-Encoding' ],

    [ 'INVALID: multiple content-length, but one empty or invalid' ],
    [ INVALID, 'close,clen,clen-empty,content' => 'content-length full and empty' ],
    [ INVALID, 'close,clen,clen-empty,content,junk' => 'content-length full and empty, content followed by junk and close' ],
    [ INVALID, 'close,clen-empty,clen,content' => 'content-length empty and full' ],
    [ INVALID, 'close,clen-empty,clen,content,junk' => 'content-length empty and full, content followed by junk and close' ],
    [ INVALID, 'close,clen,clen-invalid,content' => 'content-length full and invalid' ],
    [ INVALID, 'close,clen,clen-invalid,content,junk' => 'content-length full and invalid, content followed by junk and close' ],
    [ INVALID, 'close,clen-invalid,clen,content' => 'content-length invalid and full' ],
    [ INVALID, 'close,clen-invalid,clen,content,junk' => 'content-length invalid and full, content followed by junk and close' ],

    [ 'INVALID: content-length header containing two numbers' ],
    [ INVALID, 'close,clen50-folding100,content' => 'content-length half but full after line folding, close after real content' ],
    [ INVALID, 'close,clen50-100,content' => 'content-length half and full on same line, close after real content' ],
    [ INVALID, 'close,clen50-(100),content' => 'content-length half and full on same line, but full as MIME comment, close after real content' ],
    [ INVALID, 'close,clen100-folding50,content' => 'content-length full but half after line folding, close after real content' ],
    [ INVALID, 'close,clen100-50,content' => 'content-length full and half on same line, close after real content' ],
    [ INVALID, 'close,clen(100)-50,content' => 'content-length full and half on same line, but full as MIME comment, close after real content' ],
    [ INVALID, 'close,clen100-folding200,content,junk' => 'content-length full but double after line folding, close after real content+junk' ],
    [ INVALID, 'close,clen100-(200),content,junk' => 'content-length full and double on same line, but double as MIME comment, close after real content+junk' ],
    [ INVALID, 'close,clen200-folding100,content,junk' => 'content-length double but full after line folding, close after real content+junk' ],
    [ INVALID, 'close,clen(200)-100,content,junk' => 'content-length double and full on same line, but double as MIME comment, close after real content+junk' ],

    [ 'INVALID: invalid characters around content-length value' ],
    [ INVALID, 'close,\073(clen),content,junk' => '"Content-length: ;len", body content+junk' ],
    [ INVALID, 'close,(clen)\073,content,junk' => '"Content-length: len;", body content+junk' ],
    [ INVALID, 'close,\054(clen),content,junk' => '"Content-length: ,len", body content+junk' ],
    [ INVALID, 'close,(clen)\054,content,junk' => '"Content-length: len,", body content+junk' ],
    [ INVALID, 'close,(clen)\054(clen),content,junk' => '"Content-length: len,len", body content+junk' ],
    [ INVALID, 'close,\042(clen)\042,content,junk' => "'Content-length: \"len\"', body content+junk" ],
    [ INVALID, 'close,(clen)A,content,junk' => '"Content-length: lenA", body content+junk' ],
    [ INVALID, 'close,A(clen),content,junk' => '"Content-length: Alen", body content+junk' ],
    [ INVALID, 'close,(clen)\040A,content,junk' => '"Content-length: len A", body content+junk' ],
    [ INVALID, 'close,A\040(clen),content,junk' => '"Content-length: A len", body content+junk' ],
    [ INVALID, 'close,\240(clen),content,junk' => '"Content-length: \240len", body content+junk' ],
    [ INVALID, 'close,(clen)\240,content,junk' => '"Content-length: len\240", body content+junk' ],
    [ INVALID, 'close,(clen).0,content,junk' => '"Content-length: len.0", body content+junk' ],
    [ INVALID, 'close,(clen).9,content,junk' => '"Content-length: len.9", body content+junk' ],
    [ INVALID, 'close,clenx0,content' => 'Content-length value with \0 inside, body content' ],



( run in 0.997 second using v1.01-cache-2.11-cpan-df04353d9ac )