[pacman-dev] [PATCH 2/3] Fix a memory leak when loading an invalid package

Dan McGee dan at archlinux.org
Wed Feb 29 18:42:23 EST 2012


This is easily triggered via a `pacman -Sc` operation when it attempts
to open a delta file as a package- we end up leaking loads of memory
due to us never freeing the archive object. When you have upwards of
1200 delta files in your sync database directory, this results in a
memory leak of nearly 1.5 MiB.

Also fix another memory leak noticed at the same time- we need to call
the internal _alpm_pkg_free() function, as without the origin data being
set the public free function will do nothing.

Signed-off-by: Dan McGee <dan at archlinux.org>
---

For maint. Seen when testing the previous patch.

 lib/libalpm/be_package.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c
index 4d9d0e8..ad34640 100644
--- a/lib/libalpm/be_package.c
+++ b/lib/libalpm/be_package.c
@@ -382,7 +382,7 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
 
 	/* try to create an archive object to read in the package */
 	if((archive = archive_read_new()) == NULL) {
-		alpm_pkg_free(newpkg);
+		_alpm_pkg_free(newpkg);
 		RET_ERR(handle, ALPM_ERR_LIBARCHIVE, NULL);
 	}
 
@@ -391,8 +391,8 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
 
 	if(archive_read_open_filename(archive, pkgfile,
 				ALPM_BUFFER_SIZE) != ARCHIVE_OK) {
-		alpm_pkg_free(newpkg);
-		RET_ERR(handle, ALPM_ERR_PKG_OPEN, NULL);
+		handle->pm_errno = ALPM_ERR_PKG_OPEN;
+		goto error;
 	}
 
 	_alpm_log(handle, ALPM_LOG_DEBUG, "starting package load for %s\n", pkgfile);
-- 
1.7.9.2



More information about the pacman-dev mailing list