Package: reprepro
Version: 3.5.2-4
Severity: important
Tags: patch
If reprepro has Contents file creation enabled (i.e., conf has "Contents: ."
directive),
then inserting a large binary package (larger than about 1GB, or more
precisely,
one whose data.tar.gz component is larger than 999,999,999 bytes) leads to the
following error:
etch:~# reprepro includedeb hardy bigpackage_1.0-1_amd64.deb
Exporting indices...
Error calculating length field in ar file
/var/www/reprepro/pool/localrepo/b/bigpackage/bigpackage_1.0-1_amd64.deb
Could not find a data.tar.gz file within
'/var/www/reprepro/pool/localrepo/b/bigpackage/bigpackage_1.0-1_amd64.deb'!
See patch below. The code in ar.c parses the header structs of an AR format
file.
The ASCII decimal size field of that header is 10 bytes long, right-padded with
spaces if the byte size is 999,999,999 or less. To call strtoul(), the code in
ar.c tries to force a 0-byte ('\0') after that header field, but is off by one
byte.
This isn't usually a problem, because strtoul() stops parsing when it hits
the space-padding. But once the file size exceeds 999,999,999 bytes,
the space-padding is no longer present, and the 0-byte is in the wrong place.
In this case *p would equal to '`' instead of '\0'.
Here is a patch that fixes this problem:
diff -ruN orig.reprepro-3.5.2/ar.c reprepro-3.5.2/ar.c
--- orig.reprepro-3.5.2/ar.c 2008-03-06 07:34:39.000000000 -0700
+++ reprepro-3.5.2/ar.c 2008-11-03 11:51:34.000000000 -0700
@@ -190,7 +190,7 @@
/* calculate the length and mark possible fillers being needed */
- ar->currentheader.ah_size[11] = '\0'; // ugly, but it works
+ ar->currentheader.ah_size[10] = '\0'; // ugly, but it works
ar->bytes_left = strtoul(ar->currentheader.ah_size,&p,10);
if( *p != '\0' && *p != ' ' ) {
Thanks,
Aramian
Credits: The author would like to thank Alexander Perlis for his help in
putting together this bug report.
-- System Information:
Debian Release: 4.0
APT prefers stable
APT policy: (700, 'stable'), (650, 'testing'), (600, 'unstable')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-6-686
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Versions of packages reprepro depends on:
ii libarchive1 2.4.17-2 Single library to read/write tar,
ii libbz2-1.0 1.0.5-1 high-quality block-sorting file co
ii libc6 2.7-15 GNU C Library: Shared libraries
ii libdb4.6 4.6.21-11 Berkeley v4.6 Database Libraries [
ii libgpg-error0 1.4-2 library for common error values an
ii libgpgme11 1.1.6-2 GPGME - GnuPG Made Easy
ii zlib1g 1:1.2.3.3.dfsg-12 compression library - runtime
Versions of packages reprepro recommends:
ii apt 0.6.46.4-0.1 Advanced front-end for dpkg
-- no debconf information
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]