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

Reply via email to