12 my $CompressClass = identify();
13 my $UncompressClass = getInverse($CompressClass);
14 my $Error = getErrorRef($CompressClass);
15 my $UnError = getErrorRef($UncompressClass);
20 some more stuff on this line
27 my ($info, $compressed) = mkComplete($CompressClass, $hello);
29 my $header_size = $info->{HeaderLength};
30 my $trailer_size = $info->{TrailerLength};
31 my $fingerprint_size = $info->{FingerprintLength};
32 ok 1, "Compressed size is " . length($compressed) ;
33 ok 1, "Fingerprint size is $fingerprint_size" ;
34 ok 1, "Header size is $header_size" ;
35 ok 1, "Trailer size is $trailer_size" ;
37 for my $trans ( 0 .. 1)
39 title "Truncating $CompressClass, Transparent $trans";
42 foreach my $i (1 .. $fingerprint_size-1)
44 my $lex = new LexFile my $name ;
46 title "Fingerprint Truncation - length $i, Transparent $trans";
48 my $part = substr($compressed, 0, $i);
49 writeFile($name, $part);
51 my $gz = new $UncompressClass $name,
52 -BlockSize => $blocksize,
53 -Transparent => $trans;
58 is $gz->read($buff), length($part) ;
70 # Any header corruption past the fingerprint is considered catastrophic
71 # so even if Transparent is set, it should still fail
73 foreach my $i ($fingerprint_size .. $header_size -1)
75 my $lex = new LexFile my $name ;
77 title "Header Truncation - length $i, Transparent $trans";
79 my $part = substr($compressed, 0, $i);
80 writeFile($name, $part);
81 ok ! defined new $UncompressClass $name,
82 -BlockSize => $blocksize,
83 -Transparent => $trans;
88 foreach my $i ($header_size .. length($compressed) - 1 - $trailer_size)
92 my $lex = new LexFile my $name ;
94 title "Compressed Data Truncation - length $i, Transparent $trans";
96 my $part = substr($compressed, 0, $i);
97 writeFile($name, $part);
98 ok my $gz = new $UncompressClass $name,
100 -BlockSize => $blocksize,
101 -Transparent => $trans
106 $status = $gz->read($un) while $status > 0 ;
107 cmp_ok $status, "<", 0 ;
113 # RawDeflate does not have a trailer
114 next if $CompressClass eq 'IO::Compress::RawDeflate' ;
116 title "Compressed Trailer Truncation";
117 foreach my $i (length($compressed) - $trailer_size .. length($compressed) -1 )
119 foreach my $lax (0, 1)
121 my $lex = new LexFile my $name ;
123 ok 1, "Compressed Trailer Truncation - Length $i, Lax $lax, Transparent $trans" ;
124 my $part = substr($compressed, 0, $i);
125 writeFile($name, $part);
126 ok my $gz = new $UncompressClass $name,
127 -BlockSize => $blocksize,
130 -Transparent => $trans;
133 $status = $gz->read($un) while $status > 0 ;
139 or diag "Status $status Error is " . $gz->error() ;
141 or diag "Status $status Error is " . $gz->error() ;
146 cmp_ok $status, "<", 0
147 or diag "Status $status Error is " . $gz->error() ;
149 or diag "Status $status Error is " . $gz->error() ;