pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkg/46382: lintpkgsrc may overflow /bin/sh command line length
>Number: 46382
>Category: pkg
>Synopsis: lintpkgsrc may overflow /bin/sh command line length
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Apr 26 13:05:00 +0000 2012
>Originator: Havard Eidnes
>Release: NetBSD 5.1
>Organization:
None
>Environment:
System: NetBSD granny-smith.urc.uninett.no 5.1 NetBSD 5.1 (GRANNY-SMITH) #4:
Fri Apr 16 16:03:14 CEST 2010
he%granny-smith.urc.uninett.no@localhost:/usr/obj/sys/arch/macppc/compile/GRANNY-SMITH
macppc
Architecture: powerpc
Machine: macppc
>Description:
The old pkgsrc build scripts try to clean out distfiles
which are no longer referenced, or where the checksum does
not match. To do this task, they use lintpkgsrc, like so:
lintpkgsrc -K /usr/pkgsrc/packages/powerpc \
-P /usr/pkgsrc \
-M /usr/pkgsrc/distfiles \
-o -m -r
However, in the phase where lintpkgsrc tries to checksum all
the existing distfiles, the command line may overflow, causing
this function to fail. Apparently some use of xargs is required.
>How-To-Repeat:
Have lots of old distfiles in a bulk pkgsrc build, watch
lintpkgsrc bail out when trying to checksum the old distfiles,
causing the old distfiles never to be cleaned up.
>Fix:
Here is a draft fix which works, but which uses the "mktemp"
utility. It is possible or maybe even probable that this is
not sufficiently portable, and that we'd instead have to resort
to something like /tmp/pl-sumfiles.$$, which isn't quite as
safe. Suggestions welcome.
Index: lintpkgsrc.pl
===================================================================
RCS file: /cvsroot/pkgsrc/pkgtools/pkglint/files/lintpkgsrc.pl,v
retrieving revision 1.115
diff -u -p -r1.115 lintpkgsrc.pl
--- lintpkgsrc.pl 22 Nov 2007 09:36:38 -0000 1.115
+++ lintpkgsrc.pl 26 Apr 2012 11:40:14 -0000
@@ -1538,7 +1538,13 @@ sub scan_pkgsrc_distfiles_vs_distinfo($$
next;
}
- open( DIGEST, "digest $sum @{$sumfiles{$sum}}|" )
+ my($tmpfile) = `mktemp /tmp/pl-sumfiles.XXXXXXX`;
+ open(SFILES, ">" . $tmpfile);
+ foreach my $f (@{$sumfiles{$sum}}) {
+ printf(SFILES "%s\n", $f);
+ }
+ close(SFILES);
+ open(DIGEST, "cat $tmpfile | xargs digest $sum |" )
|| fail("Run digest: $!");
while (<DIGEST>) {
if (m/^$sum ?\(([^\)]+)\) = (\S+)/) {
@@ -1549,6 +1555,7 @@ sub scan_pkgsrc_distfiles_vs_distinfo($$
}
}
close(DIGEST);
+ unlink($tmpfile);
}
safe_chdir('/'); # Do not want to stay in $pkgdistdir
}
Home |
Main Index |
Thread Index |
Old Index