11 # use Test::NoWarnings, if available
14 if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
17 plan tests => 788 + $extra ;
19 use_ok('Compress::Zlib', 2) ;
20 use_ok('Compress::Gzip::Constants') ;
22 use_ok('IO::Compress::Gzip', qw($GzipError)) ;
23 use_ok('IO::Uncompress::Gunzip', qw($GunzipError)) ;
29 # Check the Gzip Header Parameters
30 #========================================
32 my $ThisOS_code = $Compress::Zlib::gzip_os_code;
34 my $name = "test.gz" ;
35 my $lex = new LexFile $name ;
38 title "Check Defaults";
39 # Check Name defaults undef, no name, no comment
40 # and Time can be explicitly set.
42 my $hdr = readHeaderInfo($name, -Time => 1234);
44 is $hdr->{Time}, 1234;
45 ok ! defined $hdr->{Name};
46 is $hdr->{MethodName}, 'Deflated';
47 is $hdr->{ExtraFlags}, 0;
48 is $hdr->{MethodID}, Z_DEFLATED;
49 is $hdr->{OsID}, $ThisOS_code ;
50 ok ! defined $hdr->{Comment} ;
51 ok ! defined $hdr->{ExtraFieldRaw} ;
52 ok ! defined $hdr->{HeaderCRC} ;
53 ok ! $hdr->{isMinimalHeader} ;
58 title "Check name can be different from filename" ;
59 # Check Name can be different from filename
60 # Comment and Extra can be set
61 # Can specify a zero Time
63 my $comment = "This is a Comment" ;
64 my $extra = "A little something extra" ;
65 my $aname = "a new name" ;
66 my $hdr = readHeaderInfo $name,
70 -ExtraField => $extra,
74 ok $hdr->{Name} eq $aname;
75 ok $hdr->{MethodName} eq 'Deflated';
76 ok $hdr->{MethodID} == 8;
77 is $hdr->{ExtraFlags}, 0;
78 ok $hdr->{Comment} eq $comment ;
79 is $hdr->{OsID}, $ThisOS_code ;
80 ok ! $hdr->{isMinimalHeader} ;
81 ok ! defined $hdr->{HeaderCRC} ;
85 title "Check Time defaults to now" ;
87 # Check Time defaults to now
88 # and that can have empty name, comment and extrafield
90 my $hdr = readHeaderInfo $name,
97 ok $hdr->{Time} >= $before ;
98 ok $hdr->{Time} <= $after ;
100 ok defined $hdr->{Name} ;
101 ok $hdr->{Name} eq "";
102 ok defined $hdr->{Comment} ;
103 ok $hdr->{Comment} eq "";
104 ok defined $hdr->{ExtraFieldRaw} ;
105 ok $hdr->{ExtraFieldRaw} eq "";
106 is $hdr->{ExtraFlags}, 0;
108 ok ! $hdr->{isMinimalHeader} ;
109 ok $hdr->{TextFlag} ;
110 ok ! defined $hdr->{HeaderCRC} ;
111 is $hdr->{OsID}, $ThisOS_code ;
116 title "can have null extrafield" ;
119 my $hdr = readHeaderInfo $name,
123 -ExtraField => "\x00";
126 ok $hdr->{Time} >= $before ;
127 ok $hdr->{Time} <= $after ;
128 ok $hdr->{Name} eq "a";
129 ok $hdr->{Comment} eq "b";
130 is $hdr->{ExtraFlags}, 0;
131 ok $hdr->{ExtraFieldRaw} eq "\x00";
132 ok ! $hdr->{isMinimalHeader} ;
133 ok ! $hdr->{TextFlag} ;
134 ok ! defined $hdr->{HeaderCRC} ;
135 is $hdr->{OsID}, $ThisOS_code ;
140 title "can have undef name, comment, time and extrafield" ;
142 my $hdr = readHeaderInfo $name,
145 -ExtraField => undef,
148 ok $hdr->{Time} == 0;
149 ok ! defined $hdr->{Name} ;
150 ok ! defined $hdr->{Comment} ;
151 ok ! defined $hdr->{ExtraFieldRaw} ;
152 ok ! $hdr->{isMinimalHeader} ;
153 ok ! $hdr->{TextFlag} ;
154 ok ! defined $hdr->{HeaderCRC} ;
155 is $hdr->{OsID}, $ThisOS_code ;
160 title "Check crchdr" ;
162 my $hdr = readHeaderInfo $name, -HeaderCRC => 1;
164 ok ! defined $hdr->{Name};
165 is $hdr->{ExtraFlags}, 0;
166 ok ! defined $hdr->{ExtraFieldRaw} ;
167 ok ! defined $hdr->{Comment} ;
168 ok ! $hdr->{isMinimalHeader} ;
169 ok ! $hdr->{TextFlag} ;
170 ok defined $hdr->{HeaderCRC} ;
171 is $hdr->{OsID}, $ThisOS_code ;
175 title "Check ExtraFlags" ;
177 my $hdr = readHeaderInfo $name, -Level => Z_BEST_SPEED;
179 ok ! defined $hdr->{Name};
180 is $hdr->{ExtraFlags}, 2;
181 ok ! defined $hdr->{ExtraFieldRaw} ;
182 ok ! defined $hdr->{Comment} ;
183 ok ! $hdr->{isMinimalHeader} ;
184 ok ! $hdr->{TextFlag} ;
185 ok ! defined $hdr->{HeaderCRC} ;
187 $hdr = readHeaderInfo $name, -Level => Z_BEST_COMPRESSION;
189 ok ! defined $hdr->{Name};
190 is $hdr->{ExtraFlags}, 4;
191 ok ! defined $hdr->{ExtraFieldRaw} ;
192 ok ! defined $hdr->{Comment} ;
193 ok ! $hdr->{isMinimalHeader} ;
194 ok ! $hdr->{TextFlag} ;
195 ok ! defined $hdr->{HeaderCRC} ;
197 $hdr = readHeaderInfo $name, -Level => Z_BEST_COMPRESSION,
200 ok ! defined $hdr->{Name};
201 is $hdr->{ExtraFlags}, 42;
202 ok ! defined $hdr->{ExtraFieldRaw} ;
203 ok ! defined $hdr->{Comment} ;
204 ok ! $hdr->{isMinimalHeader} ;
205 ok ! $hdr->{TextFlag} ;
206 ok ! defined $hdr->{HeaderCRC} ;
214 for my $code ( -1, undef, '', 'fred' )
216 my $code_name = defined $code ? "'$code'" : 'undef';
217 eval { new IO::Compress::Gzip $name, -OS_Code => $code } ;
218 like $@, mkErr("^IO::Compress::Gzip: Parameter 'OS_Code' must be an unsigned int, got $code_name"),
219 " Trap OS Code $code_name";
222 for my $code ( qw( 256 ) )
224 ok ! new IO::Compress::Gzip($name, OS_Code => $code) ;
225 like $GzipError, "/^OS_Code must be between 0 and 255, got '$code'/",
226 " Trap OS Code $code";
229 for my $code ( qw(0 1 12 254 255) )
231 my $hdr = readHeaderInfo $name, OS_Code => $code;
233 is $hdr->{OsID}, $code, " Code is $code" ;
241 title 'Check ExtraField';
244 [1, ['AB' => ''] => [['AB'=>'']] ],
245 [1, {'AB' => ''} => [['AB'=>'']] ],
246 [1, ['AB' => 'Fred'] => [['AB'=>'Fred']] ],
247 [1, {'AB' => 'Fred'} => [['AB'=>'Fred']] ],
248 [1, ['Xx' => '','AB' => 'Fred'] => [['Xx' => ''],['AB'=>'Fred']] ],
249 [1, ['Xx' => '','Xx' => 'Fred'] => [['Xx' => ''],['Xx'=>'Fred']] ],
252 'Xx' => 'Fred'] => [['Xx' => ''],['Xx'=>'Fred'],
255 ['AB' => 'Fred'] ] => [['Xx' => 'a'],['AB'=>'Fred']] ],
258 "\x01\x02" => "\x03"} => [['AB'=>'Fred'],
260 ["\x01\x02"=>"\x03"]] ],
261 [1, ['AB' => 'z' x GZIP_FEXTRA_SUBFIELD_MAX_SIZE] =>
262 [['AB'=>'z' x GZIP_FEXTRA_SUBFIELD_MAX_SIZE]] ],
265 foreach my $test (@tests) {
266 my ($order, $input, $result) = @$test ;
267 ok my $x = new IO::Compress::Gzip $name,
268 -ExtraField => $input,
270 or diag "GzipError is $GzipError" ; ;
271 my $string = "abcd" ;
272 ok $x->write($string) ;
274 is GZreadFile($name), $string ;
276 ok $x = new IO::Uncompress::Gunzip $name,
279 or diag "GunzipError is $GunzipError" ; ;
280 my $hdr = $x->getHeaderInfo();
282 ok ! defined $hdr->{Name};
283 ok ! defined $hdr->{Comment} ;
284 ok ! $hdr->{isMinimalHeader} ;
285 ok ! $hdr->{TextFlag} ;
286 ok defined $hdr->{HeaderCRC} ;
288 ok defined $hdr->{ExtraFieldRaw} ;
289 ok defined $hdr->{ExtraField} ;
291 my $extra = $hdr->{ExtraField} ;
294 eq_array $extra, $result
296 eq_set $extra, $result;
303 title 'Write Invalid ExtraField';
305 my $prefix = 'Error with ExtraField Parameter: ';
307 [ sub{ "abc" } => "Not a scalar, array ref or hash ref"],
308 [ [ "a" ] => "Not even number of elements"],
309 [ [ "a" => "fred" ] => 'SubField ID not two chars long'],
310 [ [ "a\x00" => "fred" ] => 'SubField ID 2nd byte is 0x00'],
311 [ [ [ {}, "abc" ]] => "SubField ID is a reference"],
312 [ [ [ "ab", \1 ]] => "SubField Data is a reference"],
313 [ [ {"a" => "fred"} ] => "Not list of lists"],
314 [ [ ['ab'=>'x'],{"a" => "fred"} ] => "Not list of lists"],
315 [ [ ["aa"] ] => "SubField must have two parts"],
316 [ [ ["aa", "b", "c"] ] => "SubField must have two parts"],
317 [ [ ["ab" => 'x' x (GZIP_FEXTRA_SUBFIELD_MAX_SIZE + 1) ] ]
318 => "SubField Data too long"],
320 [ { 'abc', 1 } => "SubField ID not two chars long"],
321 [ { \1 , "abc" } => "SubField ID not two chars long"],
322 [ { "ab", \1 } => "SubField Data is a reference"],
327 foreach my $test (@tests) {
328 my ($input, $string) = @$test ;
330 my $x = new IO::Compress::Gzip \$buffer, -ExtraField => $input;
332 like $GzipError, "/^$prefix$string/";
342 ["Sub-field truncated",
343 "Error with ExtraField Parameter: FEXTRA Body",
344 "Header Error: Truncated in FEXTRA Body Section",
345 ['a', undef, undef] ],
346 ["Length of field incorrect",
347 "Error with ExtraField Parameter: FEXTRA Body",
348 "Header Error: Truncated in FEXTRA Body Section",
349 ["ab", 255, "abc"] ],
350 ["Length of 2nd field incorrect",
351 "Error with ExtraField Parameter: FEXTRA Body",
352 "Header Error: Truncated in FEXTRA Body Section",
353 ["ab", 3, "abc"], ["de", 7, "x"] ],
354 ["Length of 2nd field incorrect",
355 "Error with ExtraField Parameter: SubField ID 2nd byte is 0x00",
356 "Header Error: Truncated in FEXTRA Body Section",
357 ["a\x00", 3, "abc"], ["de", 7, "x"] ],
360 foreach my $test (@tests)
362 my $name = shift @$test;
363 my $gzip_error = shift @$test;
364 my $gunzip_error = shift @$test;
366 title "Read Corrupt ExtraField - $name" ;
370 for my $field (@$test)
372 my ($id, $len, $data) = @$field;
374 $input .= $id if defined $id ;
375 $input .= pack("v", $len) if defined $len ;
376 $input .= $data if defined $data;
381 my $x = new IO::Compress::Gzip \$buffer, -ExtraField => $input, Strict => 1;
383 ok ! $x, " IO::Compress::Gzip fails";
384 like $GzipError, "/^$gzip_error/", " $name";
386 foreach my $check (0, 1)
388 ok $x = new IO::Compress::Gzip \$buffer, -ExtraField => $input, Strict => 0
389 or diag "GzipError is $GzipError" ; ;
390 my $string = "abcd" ;
393 is anyUncompress(\$buffer), $string ;
395 $x = new IO::Uncompress::Gunzip \$buffer, Strict => 0,
396 ParseExtra => $check;
399 like $GunzipError, "/^$gunzip_error/";
411 title 'Check Minimal';
413 ok my $x = new IO::Compress::Gzip $name, -Minimal => 1;
414 my $string = "abcd" ;
415 ok $x->write($string) ;
417 is GZreadFile($name), $string ;
419 ok $x = new IO::Uncompress::Gunzip $name ;
420 my $hdr = $x->getHeaderInfo();
422 ok $hdr->{Time} == 0;
423 is $hdr->{ExtraFlags}, 0;
424 ok ! defined $hdr->{Name} ;
425 ok ! defined $hdr->{ExtraFieldRaw} ;
426 ok ! defined $hdr->{Comment} ;
427 is $hdr->{OsName}, 'Unknown' ;
428 is $hdr->{MethodName}, "Deflated";
430 ok $hdr->{isMinimalHeader} ;
431 ok ! $hdr->{TextFlag} ;
436 # Check Minimal + no comressed data
437 # This is the smallest possible gzip file (20 bytes)
439 ok my $x = new IO::Compress::Gzip $name, -Minimal => 1;
441 ok GZreadFile($name) eq '' ;
443 ok $x = new IO::Uncompress::Gunzip $name, -Append => 1 ;
447 $status = $x->read($data)
454 my $hdr = $x->getHeaderInfo();
457 ok defined $hdr->{ISIZE} ;
460 ok defined $hdr->{CRC32} ;
464 ok ! defined $hdr->{Name} ;
465 ok ! defined $hdr->{ExtraFieldRaw} ;
466 ok ! defined $hdr->{Comment} ;
467 is $hdr->{OsName}, 'Unknown' ;
468 is $hdr->{MethodName}, "Deflated";
470 ok $hdr->{isMinimalHeader} ;
471 ok ! $hdr->{TextFlag} ;
476 # Header Corruption Tests
483 ok my $x = new IO::Compress::Gzip \$good, -HeaderCRC => 1 ;
484 ok $x->write($string) ;
488 title "Header Corruption - Fingerprint wrong 1st byte" ;
490 substr($buffer, 0, 1) = 'x' ;
492 ok ! new IO::Uncompress::Gunzip \$buffer, -Transparent => 0 ;
493 ok $GunzipError =~ /Header Error: Bad Magic/;
497 title "Header Corruption - Fingerprint wrong 2nd byte" ;
499 substr($buffer, 1, 1) = "\xFF" ;
501 ok ! new IO::Uncompress::Gunzip \$buffer, -Transparent => 0 ;
502 ok $GunzipError =~ /Header Error: Bad Magic/;
503 #print "$GunzipError\n";
507 title "Header Corruption - CM not 8";
509 substr($buffer, 2, 1) = 'x' ;
511 ok ! new IO::Uncompress::Gunzip \$buffer, -Transparent => 0 ;
512 like $GunzipError, '/Header Error: Not Deflate \(CM is \d+\)/';
516 title "Header Corruption - Use of Reserved Flags";
518 substr($buffer, 3, 1) = "\xff";
520 ok ! new IO::Uncompress::Gunzip \$buffer, -Transparent => 0 ;
521 like $GunzipError, '/Header Error: Use of Reserved Bits in FLG field./';
525 title "Header Corruption - Fail HeaderCRC";
527 substr($buffer, 10, 1) = chr((ord(substr($buffer, 10, 1)) + 1) & 0xFF);
529 ok ! new IO::Uncompress::Gunzip \$buffer, -Transparent => 0, Strict => 1
530 or print "# $GunzipError\n";
531 like $GunzipError, '/Header Error: CRC16 mismatch/'
532 #or diag "buffer length " . length($buffer);
533 or hexDump(\$good), hexDump(\$buffer);
538 title "ExtraField max raw size";
540 my $store = "x" x GZIP_FEXTRA_MAX_SIZE ;
541 my $z = new IO::Compress::Gzip(\$x, ExtraField => $store, Strict => 0) ;
542 ok $z, "Created IO::Compress::Gzip object" ;
543 my $gunz = new IO::Uncompress::Gunzip \$x, Strict => 0;
544 ok $gunz, "Created IO::Uncompress::Gunzip object" ;
545 my $hdr = $gunz->getHeaderInfo();
548 is $hdr->{ExtraFieldRaw}, $store ;
552 title "Header Corruption - ExtraField too big";
554 ok ! new IO::Compress::Gzip(\$x,
555 -ExtraField => "x" x (GZIP_FEXTRA_MAX_SIZE + 1)) ;
556 like $GzipError, '/Error with ExtraField Parameter: Too Large/';
560 title "Header Corruption - Create Name with Illegal Chars";
563 ok ! new IO::Compress::Gzip \$x,
564 -Name => "fred\x02" ;
565 like $GzipError, '/Non ISO 8859-1 Character found in Name/';
567 ok my $gz = new IO::Compress::Gzip \$x,
569 -Name => "fred\x02" ;
572 ok ! new IO::Uncompress::Gunzip \$x,
575 like $GunzipError, '/Header Error: Non ISO 8859-1 Character found in Name/';
576 ok my $gunzip = new IO::Uncompress::Gunzip \$x,
579 my $hdr = $gunzip->getHeaderInfo() ;
581 is $hdr->{Name}, "fred\x02";
586 title "Header Corruption - Null Chars in Name";
588 ok ! new IO::Compress::Gzip \$x,
590 like $GzipError, '/Null Character found in Name/';
592 ok ! new IO::Compress::Gzip \$x,
594 like $GzipError, '/Null Character found in Name/';
596 ok my $gz = new IO::Compress::Gzip \$x,
598 -Name => "abc\x00de" ;
600 ok my $gunzip = new IO::Uncompress::Gunzip \$x,
603 my $hdr = $gunzip->getHeaderInfo() ;
605 is $hdr->{Name}, "abc";
610 title "Header Corruption - Create Comment with Illegal Chars";
613 ok ! new IO::Compress::Gzip \$x,
614 -Comment => "fred\x02" ;
615 like $GzipError, '/Non ISO 8859-1 Character found in Comment/';
617 ok my $gz = new IO::Compress::Gzip \$x,
619 -Comment => "fred\x02" ;
622 ok ! new IO::Uncompress::Gunzip \$x, Strict => 1;
624 like $GunzipError, '/Header Error: Non ISO 8859-1 Character found in Comment/';
625 ok my $gunzip = new IO::Uncompress::Gunzip \$x, Strict => 0;
627 my $hdr = $gunzip->getHeaderInfo() ;
629 is $hdr->{Comment}, "fred\x02";
634 title "Header Corruption - Null Char in Comment";
636 ok ! new IO::Compress::Gzip \$x,
638 like $GzipError, '/Null Character found in Comment/';
640 ok ! new IO::Compress::Gzip \$x,
641 -Comment => "abc\x00" ;
642 like $GzipError, '/Null Character found in Comment/';
644 ok my $gz = new IO::Compress::Gzip \$x,
646 -Comment => "abc\x00de" ;
648 ok my $gunzip = new IO::Uncompress::Gunzip \$x,
651 my $hdr = $gunzip->getHeaderInfo() ;
653 is $hdr->{Comment}, "abc";
658 for my $index ( GZIP_MIN_HEADER_SIZE + 1 .. GZIP_MIN_HEADER_SIZE + GZIP_FEXTRA_HEADER_SIZE + 1)
660 title "Header Corruption - Truncated in Extra";
666 ok my $x = new IO::Compress::Gzip \$truncated, -HeaderCRC => 1, Strict => 0,
667 -ExtraField => "hello" x 10 ;
668 ok $x->write($string) ;
671 substr($truncated, $index) = '' ;
672 #my $name = "trunc.gz" ;
673 #my $lex = new LexFile $name ;
674 #writeFile($name, $truncated) ;
676 #my $g = new IO::Uncompress::Gunzip $name, -Transparent => 0;
677 my $g = new IO::Uncompress::Gunzip \$truncated, -Transparent => 0;
681 like($GunzipError, '/^Header Error: Truncated in FEXTRA/');
688 for my $index ( GZIP_MIN_HEADER_SIZE .. GZIP_MIN_HEADER_SIZE + length($Name) -1)
690 title "Header Corruption - Truncated in Name";
696 ok my $x = new IO::Compress::Gzip \$truncated, -Name => $Name;
697 ok $x->write($string) ;
700 substr($truncated, $index) = '' ;
702 my $g = new IO::Uncompress::Gunzip \$truncated, -Transparent => 0;
706 like $GunzipError, '/^Header Error: Truncated in FNAME Section/';
710 my $Comment = "comment" ;
711 for my $index ( GZIP_MIN_HEADER_SIZE .. GZIP_MIN_HEADER_SIZE + length($Comment) -1)
713 title "Header Corruption - Truncated in Comment";
719 ok my $x = new IO::Compress::Gzip \$truncated, -Comment => $Comment;
720 ok $x->write($string) ;
723 substr($truncated, $index) = '' ;
724 #my $name = "trunc.gz" ;
725 #my $lex = new LexFile $name ;
726 #writeFile($name, $truncated) ;
728 #my $g = new IO::Uncompress::Gunzip $name, -Transparent => 0;
729 my $g = new IO::Uncompress::Gunzip \$truncated, -Transparent => 0;
733 like $GunzipError, '/^Header Error: Truncated in FCOMMENT Section/';
737 for my $index ( GZIP_MIN_HEADER_SIZE .. GZIP_MIN_HEADER_SIZE + GZIP_FHCRC_SIZE -1)
739 title "Header Corruption - Truncated in CRC";
745 ok my $x = new IO::Compress::Gzip \$truncated, -HeaderCRC => 1;
746 ok $x->write($string) ;
749 substr($truncated, $index) = '' ;
750 my $name = "trunc.gz" ;
751 my $lex = new LexFile $name ;
752 writeFile($name, $truncated) ;
754 my $g = new IO::Uncompress::Gunzip $name, -Transparent => 0;
755 #my $g = new IO::Uncompress::Gunzip \$truncated, -Transparent => 0;
759 like $GunzipError, '/^Header Error: Truncated in FHCRC Section/';
765 # Trailer Corruption tests
773 ok my $x = new IO::Compress::Gzip \$good ;
774 ok $x->write($string) ;
778 writeFile($name, $good) ;
779 ok my $gunz = new IO::Uncompress::Gunzip $name,
782 1 while $gunz->read($uncomp) > 0 ;
784 ok $uncomp eq $string
785 or print "# got [$uncomp] wanted [$string]\n";;
787 foreach my $trim (-8 .. -1)
789 my $got = $trim + 8 ;
790 title "Trailer Corruption - Trailer truncated to $got bytes" ;
792 my $expected_trailing = substr($good, -8, 8) ;
793 substr($expected_trailing, $trim) = '';
795 substr($buffer, $trim) = '';
796 writeFile($name, $buffer) ;
798 foreach my $strict (0, 1)
800 ok my $gunz = new IO::Uncompress::Gunzip $name, -Strict => $strict ;
804 ok $gunz->read($uncomp) < 0 ;
805 like $GunzipError, "/Trailer Error: trailer truncated. Expected 8 bytes, got $got/";
809 ok $gunz->read($uncomp) > 0 ;
811 my $expected = substr($buffer, - $got);
812 is ${ $gunz->trailingData() }, $expected_trailing;
815 ok $uncomp eq $string;
822 title "Trailer Corruption - Length Wrong, CRC Correct" ;
824 my $actual_len = unpack("V", substr($buffer, -4, 4));
825 substr($buffer, -4, 4) = pack('V', $actual_len + 1);
826 writeFile($name, $buffer) ;
828 foreach my $strict (0, 1)
830 ok my $gunz = new IO::Uncompress::Gunzip $name,
835 ok $gunz->read($uncomp) < 0 ;
836 my $got_len = $actual_len + 1;
837 like $GunzipError, "/Trailer Error: ISIZE mismatch. Got $got_len, expected $actual_len/";
841 ok $gunz->read($uncomp) > 0 ;
843 #is $gunz->trailingData(), substr($buffer, - $got) ;
845 ok ! ${ $gunz->trailingData() } ;
847 ok $uncomp eq $string;
854 title "Trailer Corruption - Length Correct, CRC Wrong" ;
856 my $actual_crc = unpack("V", substr($buffer, -8, 4));
857 substr($buffer, -8, 4) = pack('V', $actual_crc+1);
858 writeFile($name, $buffer) ;
860 foreach my $strict (0, 1)
862 ok my $gunz = new IO::Uncompress::Gunzip $name,
867 ok $gunz->read($uncomp) < 0 ;
868 like $GunzipError, '/Trailer Error: CRC mismatch/';
872 ok $gunz->read($uncomp) > 0 ;
875 ok ! ${ $gunz->trailingData() } ;
877 ok $uncomp eq $string;
884 title "Trailer Corruption - Length Wrong, CRC Wrong" ;
886 my $actual_len = unpack("V", substr($buffer, -4, 4));
887 my $actual_crc = unpack("V", substr($buffer, -8, 4));
888 substr($buffer, -4, 4) = pack('V', $actual_len+1);
889 substr($buffer, -8, 4) = pack('V', $actual_crc+1);
890 writeFile($name, $buffer) ;
892 foreach my $strict (0, 1)
894 ok my $gunz = new IO::Uncompress::Gunzip $name,
899 ok $gunz->read($uncomp) < 0 ;
900 like $GunzipError, '/Trailer Error: CRC mismatch/';
904 ok $gunz->read($uncomp) > 0 ;
908 ok $uncomp eq $string;