Package: libsyntax-keyword-multisub-perl Version: 0.02-2 Severity: serious Tags: patch User: ubuntu-de...@lists.ubuntu.com Usertags: origin-ubuntu lunar ubuntu-patch
Hi Gregor, libsyntax-keyword-multisub-perl fails to build from source on multiple architectures because the build-time test suite successfully captures a bug in the code for which there is a compiler warning during the build: lib/Syntax/Keyword/MultiSub.xs:52:11: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘IV’ {aka ‘long long int’} [-Wformat=] (https://buildd.debian.org/status/fetch.php?pkg=libsyntax-keyword-multisub-perl&arch=armhf&ver=0.02-2&stamp=1658361396&raw=0) The code uses a format string for an int, but passes nargs which is of type IV which is almost never an int. Therefore on some architectures the value is being read from the wrong place in memory, resulting in a garbage value instead of '3' as it should be in the test case: [...] # Failed test 'f() complains with too many args' # at t/01multi.t line 22. # 'Unable to find a function body for a call to &main::f having 40571528 arguments at t/01multi.t line 21. # ' # doesn't match '(?^u:^Unable to find a function body for a call to &main::f having 3 arguments at )' # Looks like you failed 1 test of 9. [...] The attached patch fixes the code by casting nargs to an int, which in practice should always be sufficient. Normally a build failure on architectures where the package has never built before is an 'important' rather than 'serious' bug; because the new version of libfuture-asyncawait-perl build-depends on libsyntax-keyword-multisub-perl, it is also blocked by this bug so I am marking it serious instead. Thanks, -- Steve Langasek Give me a lever long enough and a Free OS Debian Developer to set it on, and I can move the world. Ubuntu Developer https://www.debian.org/ slanga...@ubuntu.com vor...@debian.org
diff -Nru libsyntax-keyword-multisub-perl-0.02/debian/patches/correct-format-string-arguments.patch libsyntax-keyword-multisub-perl-0.02/debian/patches/correct-format-string-arguments.patch --- libsyntax-keyword-multisub-perl-0.02/debian/patches/correct-format-string-arguments.patch 1969-12-31 16:00:00.000000000 -0800 +++ libsyntax-keyword-multisub-perl-0.02/debian/patches/correct-format-string-arguments.patch 2022-12-10 20:41:55.000000000 -0800 @@ -0,0 +1,23 @@ +Description: Ensure format string arguments are of the matching type + The code treats 'nargs' as an int, but it is of type IV which may be of a + different size. This results in the code reading the wrong area of memory + on some architectures, and rightly failing the build because the resulting + error message is wrong (printing a garbage value for the number of arguments, + instead of '3'). +Author: Steve Langasek <steve.langa...@ubuntu.com> +Last-Update: 2022-12-10 +Forwarded: no + +Index: libsyntax-keyword-multisub-perl-0.02/lib/Syntax/Keyword/MultiSub.xs +=================================================================== +--- libsyntax-keyword-multisub-perl-0.02.orig/lib/Syntax/Keyword/MultiSub.xs ++++ libsyntax-keyword-multisub-perl-0.02/lib/Syntax/Keyword/MultiSub.xs +@@ -50,7 +50,7 @@ + + if(!jumpcv) + croak("Unable to find a function body for a call to &%s::%s having %d arguments", +- HvNAME(CvSTASH(runcv)), GvNAME(CvGV(runcv)), nargs); ++ HvNAME(CvSTASH(runcv)), GvNAME(CvGV(runcv)), (int)nargs); + + /* Now pretend to be goto &$cv + * Reuse the same PL_op structure and just call that ppfunc */ diff -Nru libsyntax-keyword-multisub-perl-0.02/debian/patches/series libsyntax-keyword-multisub-perl-0.02/debian/patches/series --- libsyntax-keyword-multisub-perl-0.02/debian/patches/series 1969-12-31 16:00:00.000000000 -0800 +++ libsyntax-keyword-multisub-perl-0.02/debian/patches/series 2022-12-10 20:38:30.000000000 -0800 @@ -0,0 +1 @@ +correct-format-string-arguments.patch