[debhelper-devel] Bug#864182: debhelper: dh_md5sums can fail on packages with many/long conffiles

Niels Thykier niels at thykier.net
Sun Jun 4 21:19:30 UTC 2017


Package: debhelper
Version: 10.2.5
Severity: minor

I noticed this stackoverflow question: https://stackoverflow.com/questions/30185972/dh-md5sums-argument-list-too-long?rq=1

Looking at the code, it appears to still apply to debhelper/10.2.5:

"""
	# Check if we should exclude conffiles.
	my $exclude="";
	if (! $dh{INCLUDE_CONFFILES} && -r "$tmp/DEBIAN/conffiles") {
		# Generate exclude regexp.
		open(my $fd, '<', "$tmp/DEBIAN/conffiles")
		  or die("open $tmp/DEBIAN/conffiles failed: $!");
		while (<$fd>) {
			chomp;
			s/^\///;
			$exclude.="! -path \"./$_\" ";
		}
		close($fd);
	}
	
	# See if we should exclude other files.
	if (defined($dh{EXCLUDE_FIND}) && $dh{EXCLUDE_FIND} ne '') {
		$exclude.="! \\( $dh{EXCLUDE_FIND} \\) ";
	}
	
	my $find="find . -type f $exclude ! -regex './DEBIAN/.*' -printf '%P\\0'";
	complex_doit("(cd $tmp >/dev/null ; $find | LC_ALL=C sort -z | xargs -r0 md5sum | " .
                  q{perl -pe 'if (s@^\\\\@@) { s/\\\\\\\\/\\\\/g; }' > DEBIAN/md5sums) >/dev/null});
"""

Imagine "$tmp/DEBIAN/conffiles" containing 1000 paths of 1000 bytes
each, then we end up with over a million bytes in $exclude[1].  This
is later shoved into a shell, which then chokes on it.

Thanks,
~Niels

[1] Admittedly, this can occur via -X as well, but it seems less
likely to be an issue as the caller of dh_md5sums would probably run
into the issue first.




More information about the debhelper-devel mailing list