diff options
author | 2005-03-01 00:00:33 +0000 | |
---|---|---|
committer | 2005-03-01 00:00:33 +0000 | |
commit | 3b7fac4c4e63504df11cf15fbe1232382ae89599 (patch) | |
tree | a5e546563edeb9b9f34dc13fe6677b78624e0480 /dev-libs/libtar | |
parent | Added some built_with_use magic to make sure perl has been compiled with USE=... (diff) | |
download | gentoo-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/ChangeLog | 10 | ||||
-rw-r--r-- | dev-libs/libtar/files/digest-libtar-1.2.11-r1 | 1 | ||||
-rw-r--r-- | dev-libs/libtar/files/libtar-1.2.11-memleak.patch | 114 | ||||
-rw-r--r-- | dev-libs/libtar/libtar-1.2.11-r1.ebuild | 27 |
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 +} |