Package: lintian
Version: 2.135.0
Severity: important
Hi,
$ lintian mp3gain_1.6.2-3.dsc
Warning in processable mp3gain_1.6.2-3.dsc: Can't call method "pointer" on an
undefined value at /usr/share/lintian/lib/Lintian/Check/Debhelper.pm line 510.
warning: cannot run debhelper check on package source:mp3gain_1.6.2-3
[...]
This is a regression between lintian 2.134.0 and 2.135.0.
According to UDD, the affected packages are:
source | version
---------------------------+------------------------------
abcm2ps | 8.14.18-1
cubeb | 0.0~git20250401.975a727+ds-1
cubeb | 0.0~git20250529.78ee5f0+ds-2
deb-build-artifact-gather | 0.2
dh-builtusing | 0.0.14
goaccess | 1:1.10.1-1
lingot | 1.1.1-8
mp3gain | 1.6.2-3
mscgen | 0.20-16
oaknut | 1.2.2+git20240301.94c726c-2
qmidictl | 1.0.2-1
slimserver | 9.1.0+dfsg-5
stterm | 0.9.3-2
viking | 1.11-3
(14 rows)
<LLM-generated bug analysis (I'm not saying I agree with it)>
Bug: $drules is undef when a non-debian-rules build driver is declared, causing
a crash at $drules->pointer.
Exact flow for mp3gain with Build-Driver: debputy:
1. Line 205-206: $build_driver = 'debputy', so $build_systems{'debputy'} = 1
2. Line 211-212: $drules is set only if $droot exists — it may or may not be
defined
3. Line 229: The guard if (!defined $build_driver || $build_driver eq
'debian-rules') is false (since $build_driver eq 'debputy'), so the entire
debian/rules parsing block is skipped — $drules is never validated,
$seen_any_dh_command stays false
4. Line 488-491: The first branch if (defined $build_driver && $build_driver ne
'debian-rules') is true, so it uses $dcontrol->item->pointer — this is safe
5. Line 500: unless ($seen_any_dh_command) — true (no dh commands were seen
because rules were never parsed)
6. Line 510: $self->pointed_hint('package-does-not-use-debhelper',
$drules->pointer) — CRASH because $drules is undef
Proposed fix at line 502 (HEAD):
unless ($seen_any_dh_command) {
$self->pointed_hint('package-does-not-use-debhelper', $drules->pointer)
if $drules;
return;
}
The package-does-not-use-debhelper tag is semantically wrong when a
non-debian-rules build driver is in use anyway — the package is declaring an
explicit build system, not "missing" debhelper. Later $drules->pointer calls
are safe because the return on line 503 prevents reaching them when $drules is
undef.
Alternatively, we could skip the tag entirely when a non-debian-rules build
driver is declared, which might be cleaner:
unless ($seen_any_dh_command) {
$self->pointed_hint('package-does-not-use-debhelper', $drules->pointer)
if defined $build_driver && $build_driver eq 'debian-rules';
return;
}
</LLM-generated bug analysis (I'm not saying I agree with it)>
Best,
Lucas