Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package lintian

The 2.5.50.2 unload works around a "perl stack" corruption (not to be
confused with perl's C stack) and makes a gnuplot file compability
with gnuplot 5 (so it works with the version we are shipping in
stretch).

I will expand on the stack corruption below in case it is relevant for
your understanding of the issue and the fix[1]. That said, the fix is
shorter than my explanation, so you may just want to skip ahead to the
debdiff.

unblock lintian/2.5.50.2

Thanks,
~Niels

[1]
Perl stack corruption
=====================

For most runs, "perl stack" corruption occurs but perl never notices
it until it has to unwind the stack to the point of the corruption.
On a successful run, the lintian tools will always exit from their
main sub and therefore avoid the issue.  To reproduce this bug, you
will have to cause the tool to throw an exception that generates a
stack trace (or unwinds past the main sub).

That is very trivial to do with the reporting framework (but could in
theory happen in lintian-info and lintian-lab-tool).  It cannot be
reproduced in lintian itself.  Lintian 2.5.50.2 is started via an
"exec" call after the stack corruption, so lintian cannot unwind to
the corrupted stack.

To reproduce, install lintian 2.5.50.1 and run:

"""
$ mkdir empty-dir
$ /usr/share/lintian/frontend/dplint reporting-sync-state \
      --state-dir empty-dir \
      --mirror-path /value-does-not-matter \
      --distributions value-does-not-matter \
      --architectures value-does-not-matter \
      --mirror-areas value-does-not-matter \
      --desired-version 2.5.50.1
Can't locate object method "errno" via package "Bizarre copy of ARRAY in list 
assignment at /usr/share/perl/5.24/Carp.pm line 229.
" (perhaps you forgot to load "Bizarre copy of ARRAY in list assignment at 
/usr/share/perl/5.24/Carp.pm line 229.
"?) at /usr/share/perl5/Lintian/Util.pm line 1614.
"""

The output here is a "double fault".  First, perl notices the
corruption and throws a string exception with the text:

  "Bizarre copy of ARRAY in list assignment at /usr/share/perl/5.24/Carp.pm 
line 229.\n"

Lintian catches this assuming it is an autodie exception and then
tries to call the "errno" method on it.  Obviously this fails again
leading to the weird error message.

The work around for this is to avoid passing the "@ARGV" variable on
the stack (i.e. passing as an argument to a perl sub).  That way, the
perl stack is not corrupted when Getopt::Long parses the options.


Thanks,
~Niels

Reply via email to