[pacman-dev] [PATCH] Fix some memleaks in alpm/add.c

Nagy Gabor ngaba at bibl.u-szeged.hu
Tue Jul 15 07:36:06 EDT 2008


From b9673a106b1f985cb81f620f394620e6eca88516 Mon Sep 17 00:00:00 2001
From: Nagy Gabor <ngaba at bibl.u-szeged.hu>
Date: Tue, 15 Jul 2008 13:30:34 +0200
Subject: [PATCH] Fix some memleaks in alpm/add.c

In case of error some allocated memory wasn't freed in commit_single_pkg.
Note: The return value of this function is not used.

Signed-off-by: Nagy Gabor <ngaba at bibl.u-szeged.hu>
---
 lib/libalpm/add.c |   20 +++++++++++++-------
 1 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
index 5bf3fcd..3b60fb3 100644
--- a/lib/libalpm/add.c
+++ b/lib/libalpm/add.c
@@ -689,7 +689,7 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
 		/* set up fake remove transaction */
 		int ret = upgrade_remove(oldpkg, newpkg, trans, db);
 		if(ret != 0) {
-			return(ret);
+			goto cleanup;
 		}
 	}
 
@@ -701,7 +701,9 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
 		_alpm_log(PM_LOG_DEBUG, "extracting files\n");
 
 		if ((archive = archive_read_new()) == NULL) {
-			RET_ERR(PM_ERR_LIBARCHIVE, -1);
+			pm_errno = PM_ERR_LIBARCHIVE;
+			ret = -1;
+			goto cleanup;
 		}
 
 		archive_read_support_compression_all(archive);
@@ -710,7 +712,9 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
 		_alpm_log(PM_LOG_DEBUG, "archive: %s\n", newpkg->origin_data.file);
 		if(archive_read_open_filename(archive, newpkg->origin_data.file,
 					ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) {
-			RET_ERR(PM_ERR_PKG_OPEN, -1);
+			pm_errno = PM_ERR_PKG_OPEN;
+			ret = -1;
+			goto cleanup;
 		}
 
 		/* save the cwd so we can restore it later */
@@ -772,7 +776,7 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
 		}
 
 		if(errors) {
-			ret = 1;
+			ret = -1;
 			if(is_upgrade) {
 				_alpm_log(PM_LOG_ERROR, _("problem occurred while upgrading %s\n"),
 						newpkg->name);
@@ -798,7 +802,9 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
 				alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg));
 		alpm_logaction("error: could not update database entry %s-%s\n",
 				alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg));
-		RET_ERR(PM_ERR_DB_WRITE, -1);
+		pm_errno = PM_ERR_DB_WRITE;
+		ret = -1;
+		goto cleanup;
 	}
 
 	if(_alpm_db_add_pkgincache(db, newpkg) == -1) {
@@ -833,9 +839,9 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
 		EVENT(trans, PM_TRANS_EVT_ADD_DONE, newpkg, oldpkg);
 	}
 
+cleanup:
 	_alpm_pkg_free(oldpkg);
-
-	return(0);
+	return(ret);
 }
 
 int _alpm_add_commit(pmtrans_t *trans, pmdb_t *db)
-- 
1.5.6.2





More information about the pacman-dev mailing list