Bug#435656: Change in behaviour of gzreadline() caused debmirror to delete my whole mirror
Peter Baumann
waste.manager at gmx.de
Fri Aug 3 17:37:13 UTC 2007
On Fri, Aug 03, 2007 at 05:22:46PM +0300, Damyan Ivanov wrote:
> severity 435656 grave
> thanks
>
> Rationale: breaks unrelated software
>
> -=| Peter Baumann, 3.08.2007 16:46 |=-
> > On Fri, Aug 03, 2007 at 08:23:10AM +0300, Damyan Ivanov wrote:
> >> The code above reads until either an empty $line appears, or $res is not
> >> positive. Could it be possible that the file in question does no contain
> >> empty lines and thus the inner while reads until EOF?
> >>
> >> Or, perhaps $line needs a chomp in order to match /^$/ ?
> >> (yes, that would mean a behaviour change)
> >
> > No. The file is fine (it is e.g dists/lenny/main/binary-i386/Packages.gz).
> > But this gave me the right direction. Here is the output of the slighly
> > changed code segment (output enclosed by '-' markers)
> >
> > my $gunzf = gzopen($file, "rb") or die "$file: $!";
> > my $line;
> > my $res;
> > my $loop = 1;
> > while ($loop) {
> > my $buf = "";
> > while(($res = $gunzf->gzreadline($line) > 0)
> > && !($line =~ /^$/)) {
> > printf "%u:%s", length($line), $line;
> > exit;
> > $buf = $buf . $line;
> > }
> >
> >
> >
> > previous version (1.42-2):
> > -
> > 16:Package: 2vcard
> > -
> >
> >
> > new version (2.005-1)
> > -
> > 791:Package: 2vcard
> > Priority: optional
> > Section: utils
> > Installed-Size: 108
> > Maintainer: Martin Albisetti <argentina at gmail.com>
> > Architecture: i386
> > Version: 0.5-1
> > Filename: pool/main/2/2vcard/2vcard_0.5-1_i386.deb
> > Size: 14090
> > MD5sum: 074de92c99657c98dff1ed42d580f84b
> > SHA1: ceea35694c35437ad3f8a1e06ab7d3e698efee56
> > SHA256: 814b27ae828b9947d63a1ce628c85e5fb36f95075f3ccdbd23c9c908e067fb6c
> > Description: A little perl script to convert an addressbook to VCARD file format
> > 2vcard is a little perl script that you can use to convert the popular vcard
> > file format. Currently 2vcard can only convert adressbooks and alias files from
> > the following formats: abook,eudora,juno,ldif,mutt,mh and pine.
> > .
> > The VCARD format is used by gnomecard, for example, which is turn is used by
> > the balsa email client.
> >
> > -
>
> Ouch! It seems only double \n's are detected?
>
> Can you also print length($/) around there? Is it zero?
>
No, it is 2 and set to "\n\n"
> If it is, this could be the source of the problem - it seems
> IO::Compress::Base (which actually implements the gzreadline function)
> supports several modes, $/ == '' provoking the "paragraph mode".
>
> I guess Compress::Zlib's gzreadline() should add "local $/ = ''"
> before
> passing the call further to preserve the previous interface.
>
> If you confirm that $/ is indeed empty and setting it to '\n' solves
> the
> problem, I'll prepare a fix.
Yes, setting it to $/="\n" fixes my problem and I get only one line from
gzreadline() as result.
-Peter
More information about the pkg-perl-maintainers
mailing list