Назад | Перейти на главную страницу

странное поведение Perl Compress-Zlib?

Я схожу с ума по этому ...

Я много лет использую функцию gzflush () в моем инструменте collectl и недавно заметил кое-что очень необычное с ее использованием в debian. Я на самом деле думаю, что это скорее факт, что это более новая версия Zlib.

Проблема, похоже, заключается в том, что функциональность где-то изменилась, и хотя я могу кодировать несколько версий, я сначала хотел бы спросить других, видели ли они это сами или знают ли точно, что именно происходит.

В частности, если я создаю 2 сжатых файла и сразу же gzflush их со значением 2, что соответствует Z_SYNC_FLUSH, он работает нормально. Но если я затем попытаюсь сбросить их во второй раз, по крайней мере, на debian с zlib V2.02, это не удастся. Идентичный код отлично работает на rhel5.2 и zlib V1.42.

Пока я не пытаюсь очистить файл, который уже был сброшен, версия debian кажется в порядке, но меня это очень раздражает, и мне интересно, что я делаю неправильно?

вот мой репродуктор:

#!/usr/bin/perl -w

use Compress::Zlib;

printf "%d %d %d %d %d\n", Z_FINISH, Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_BLOCK;

#require "Compress/Zlib.pm";

$aaa=Compress::Zlib::gzopen("/tmp/foo.gz", 'ab') or die "flush error";
$bbb=Compress::Zlib::gzopen("/tmp/foo.gz", 'ab') or die "flush error";

$m=2;
print "Flush AAA\n";
$aaa-> gzflush($m)<0 and error($aaa);
print "Flush BBB\n";
$bbb->gzflush($m)<0 and error($bbb);

print "Flush AAA\n";
$aaa-> gzflush($m)<0 and error($bbb);
print "Flush BBB\n";
$bbb->gzflush($m)<0 and error($bbb);

sub error
{ printf "Flush error reason: %s\n", $_[0]->gzerror(); $_[0]->gzclose(); exit; }

запустив это на debian, я вижу это:

./test.pl
4 0 2 3 5
Flush AAA
Flush BBB
Flush AAA
Flush error reason: buffer error

в то время как тот же сценарий в моей более ранней системе rhel делает это. Я заметил, что символ Z_BLOCK не определен в более ранней версии, поэтому удалил его из оператора печати в начале:

./test.pl
4 0 2 3
Flush AAA
Flush BBB
Flush AAA
Flush BBB

Чтобы люди знали, я обменялся электронной почтой с автором Compress :: Zlib, и он подтвердил, что это ошибка, которую он будет исправлять в следующем выпуске. -отметка