summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2005-03-01 00:00:33 +0000
committerMike Frysinger <vapier@gentoo.org>2005-03-01 00:00:33 +0000
commit3b7fac4c4e63504df11cf15fbe1232382ae89599 (patch)
treea5e546563edeb9b9f34dc13fe6677b78624e0480 /dev-libs/libtar
parentAdded some built_with_use magic to make sure perl has been compiled with USE=... (diff)
downloadgentoo-2-3b7fac4c4e63504df11cf15fbe1232382ae89599.tar.gz
gentoo-2-3b7fac4c4e63504df11cf15fbe1232382ae89599.tar.bz2
gentoo-2-3b7fac4c4e63504df11cf15fbe1232382ae89599.zip
Add patch to plug up memleak #82858 by S.Caglar Onur.
(Portage version: 2.0.51-r15)
Diffstat (limited to 'dev-libs/libtar')
-rw-r--r--dev-libs/libtar/ChangeLog10
-rw-r--r--dev-libs/libtar/files/digest-libtar-1.2.11-r11
-rw-r--r--dev-libs/libtar/files/libtar-1.2.11-memleak.patch114
-rw-r--r--dev-libs/libtar/libtar-1.2.11-r1.ebuild27
4 files changed, 150 insertions, 2 deletions
diff --git a/dev-libs/libtar/ChangeLog b/dev-libs/libtar/ChangeLog
index e26f0fbd44a5..6f0717cb743d 100644
--- a/dev-libs/libtar/ChangeLog
+++ b/dev-libs/libtar/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for dev-libs/libtar
-# Copyright 1999-2004 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/dev-libs/libtar/ChangeLog,v 1.1 2004/10/10 07:47:52 vapier Exp $
+# Copyright 1999-2005 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/dev-libs/libtar/ChangeLog,v 1.2 2005/03/01 00:00:33 vapier Exp $
+
+*libtar-1.2.11-r1 (28 Feb 2005)
+
+ 28 Feb 2005; Mike Frysinger <vapier@gentoo.org>
+ +files/libtar-1.2.11-memleak.patch, +libtar-1.2.11-r1.ebuild:
+ Add patch to plug up memleak #82858 by S.Caglar Onur.
*libtar-1.2.11 (10 Oct 2004)
diff --git a/dev-libs/libtar/files/digest-libtar-1.2.11-r1 b/dev-libs/libtar/files/digest-libtar-1.2.11-r1
new file mode 100644
index 000000000000..e55c3197379c
--- /dev/null
+++ b/dev-libs/libtar/files/digest-libtar-1.2.11-r1
@@ -0,0 +1 @@
+MD5 604238e8734ce6e25347a58c4f1a1d7e libtar-1.2.11.tar.gz 145354
diff --git a/dev-libs/libtar/files/libtar-1.2.11-memleak.patch b/dev-libs/libtar/files/libtar-1.2.11-memleak.patch
new file mode 100644
index 000000000000..0b023042d6e0
--- /dev/null
+++ b/dev-libs/libtar/files/libtar-1.2.11-memleak.patch
@@ -0,0 +1,114 @@
+Seems libtar likes to leak memory. Lets plug it.
+
+Patch by Per Lidén http://www.fukt.bth.se/~per/
+https://lists.feep.net:8080/pipermail/libtar/index.html
+http://bugs.gentoo.org/show_bug.cgi?id=82858
+
+Problem with patch: doesn't appear to be thread safe, but oh well,
+not like the functions are named with _r suffixes ;).
+
+--- libtar-1.2.11-orig/lib/decode.c
++++ libtar-1.2.11/lib/decode.c
+@@ -26,7 +26,7 @@
+ char *
+ th_get_pathname(TAR *t)
+ {
+- char filename[MAXPATHLEN];
++ static char filename[MAXPATHLEN];
+
+ if (t->th_buf.gnu_longname)
+ return t->th_buf.gnu_longname;
+@@ -35,11 +35,11 @@
+ {
+ snprintf(filename, sizeof(filename), "%.155s/%.100s",
+ t->th_buf.prefix, t->th_buf.name);
+- return strdup(filename);
++ return filename;
+ }
+
+ snprintf(filename, sizeof(filename), "%.100s", t->th_buf.name);
+- return strdup(filename);
++ return filename;
+ }
+
+
+--- libtar-1.2.11-orig/lib/extract.c
++++ libtar-1.2.11/lib/extract.c
+@@ -28,14 +28,6 @@
+ #endif
+
+
+-struct linkname
+-{
+- char ln_save[MAXPATHLEN];
+- char ln_real[MAXPATHLEN];
+-};
+-typedef struct linkname linkname_t;
+-
+-
+ static int
+ tar_set_file_perms(TAR *t, char *realname)
+ {
+@@ -98,7 +90,9 @@
+ tar_extract_file(TAR *t, char *realname)
+ {
+ int i;
+- linkname_t *lnp;
++ char *lnp;
++ int pathname_len;
++ int realname_len;
+
+ if (t->options & TAR_NOOVERWRITE)
+ {
+@@ -137,11 +131,13 @@
+ if (i != 0)
+ return i;
+
+- lnp = (linkname_t *)calloc(1, sizeof(linkname_t));
++ pathname_len = strlen(th_get_pathname(t)) + 1;
++ realname_len = strlen(realname) + 1;
++ lnp = (char *)calloc(1, pathname_len + realname_len);
+ if (lnp == NULL)
+ return -1;
+- strlcpy(lnp->ln_save, th_get_pathname(t), sizeof(lnp->ln_save));
+- strlcpy(lnp->ln_real, realname, sizeof(lnp->ln_real));
++ strcpy(&lnp[0], th_get_pathname(t));
++ strcpy(&lnp[pathname_len], realname);
+ #ifdef DEBUG
+ printf("tar_extract_file(): calling libtar_hash_add(): key=\"%s\", "
+ "value=\"%s\"\n", th_get_pathname(t), realname);
+@@ -288,7 +284,7 @@
+ {
+ char *filename;
+ char *linktgt = NULL;
+- linkname_t *lnp;
++ char *lnp;
+ libtar_hashptr_t hp;
+
+ if (!TH_ISLNK(t))
+@@ -304,8 +300,8 @@
+ if (libtar_hash_getkey(t->h, &hp, th_get_linkname(t),
+ (libtar_matchfunc_t)libtar_str_match) != 0)
+ {
+- lnp = (linkname_t *)libtar_hashptr_data(&hp);
+- linktgt = lnp->ln_real;
++ lnp = (char *)libtar_hashptr_data(&hp);
++ linktgt = &lnp[strlen(lnp) + 1];
+ }
+ else
+ linktgt = th_get_linkname(t);
+--- libtar-1.2.11-orig/lib/libtar.h
++++ libtar-1.2.11/lib/libtar.h
+@@ -63,9 +63,9 @@
+ /***** handle.c ************************************************************/
+
+ typedef int (*openfunc_t)(const char *, int, ...);
+-typedef int (*closefunc_t)(int);
+-typedef ssize_t (*readfunc_t)(int, void *, size_t);
+-typedef ssize_t (*writefunc_t)(int, const void *, size_t);
++typedef int (*closefunc_t)(long);
++typedef ssize_t (*readfunc_t)(long, void *, size_t);
++typedef ssize_t (*writefunc_t)(long, const void *, size_t);
+
+ typedef struct
+ {
diff --git a/dev-libs/libtar/libtar-1.2.11-r1.ebuild b/dev-libs/libtar/libtar-1.2.11-r1.ebuild
new file mode 100644
index 000000000000..7265ce3f01d1
--- /dev/null
+++ b/dev-libs/libtar/libtar-1.2.11-r1.ebuild
@@ -0,0 +1,27 @@
+# Copyright 1999-2005 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-libs/libtar/libtar-1.2.11-r1.ebuild,v 1.1 2005/03/01 00:00:33 vapier Exp $
+
+inherit eutils
+
+DESCRIPTION="C library for manipulating POSIX tar files"
+HOMEPAGE="http://www.feep.net/libtar/"
+SRC_URI="ftp://ftp.feep.net/pub/software/libtar/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~x86"
+IUSE=""
+
+DEPEND="sys-libs/zlib"
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+ epatch "${FILESDIR}"/${P}-memleak.patch
+}
+
+src_install() {
+ make install DESTDIR="${D}" || die
+ dodoc ChangeLog README TODO
+}