[pacman-dev] [PATCH] Use MALLOC throughtout libalpm

Allan McRae allan at archlinux.org
Sat Mar 8 02:01:23 EST 2014


Use MALLOC instead of malloc for safety in libalpm.  Some changes are pure
refactoring, but for others this provides a success check for memory
allocation.

Signed-off-by: Allan McRae <allan at archlinux.org>
---
 lib/libalpm/be_local.c   | 6 +-----
 lib/libalpm/be_package.c | 8 +++-----
 lib/libalpm/pkghash.c    | 5 +----
 lib/libalpm/sync.c       | 3 ++-
 4 files changed, 7 insertions(+), 15 deletions(-)

diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c
index 5474995..9a9bdef 100644
--- a/lib/libalpm/be_local.c
+++ b/lib/libalpm/be_local.c
@@ -743,11 +743,7 @@ static int local_db_read(alpm_pkg_t *info, alpm_dbinfrq_t inforeq)
 					/* since we know the length of the file string already,
 					 * we can do malloc + memcpy rather than strdup */
 					len += 1;
-					files[files_count].name = malloc(len);
-					if(files[files_count].name == NULL) {
-						_alpm_alloc_fail(len);
-						goto error;
-					}
+					MALLOC(files[files_count].name, len, goto error);
 					memcpy(files[files_count].name, line, len);
 					files_count++;
 				}
diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c
index 3c35484..dc2e072 100644
--- a/lib/libalpm/be_package.c
+++ b/lib/libalpm/be_package.c
@@ -39,6 +39,7 @@
 #include "package.h"
 #include "deps.h"
 #include "filelist.h"
+#include "util.h"
 
 struct package_changelog {
 	struct archive *archive;
@@ -404,11 +405,8 @@ static int add_entry_to_files_list(alpm_pkg_t *pkg, size_t *files_size,
 	 * Other code relies on it to detect directories so add it here.*/
 	if(type == AE_IFDIR && path[pathlen - 1] != '/') {
 		/* 2 = 1 for / + 1 for \0 */
-		char *newpath = malloc(pathlen + 2);
-		if (!newpath) {
-			_alpm_alloc_fail(pathlen + 2);
-			return -1;
-		}
+		char *newpath;
+		MALLOC(newpath, pathlen + 2, return -1);
 		strcpy(newpath, path);
 		newpath[pathlen] = '/';
 		newpath[pathlen + 1] = '\0';
diff --git a/lib/libalpm/pkghash.c b/lib/libalpm/pkghash.c
index 2f68278..a740233 100644
--- a/lib/libalpm/pkghash.c
+++ b/lib/libalpm/pkghash.c
@@ -172,10 +172,7 @@ static alpm_pkghash_t *pkghash_add_pkg(alpm_pkghash_t *hash, alpm_pkg_t *pkg,
 
 	position = get_hash_position(pkg->name_hash, hash);
 
-	ptr = malloc(sizeof(alpm_list_t));
-	if(ptr == NULL) {
-		return hash;
-	}
+	MALLOC(ptr, sizeof(alpm_list_t), return hash);
 
 	ptr->data = pkg;
 	ptr->prev = ptr;
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index 7e40d98..a025b68 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -1135,8 +1135,9 @@ static int check_validity(alpm_handle_t *handle,
 
 		if(_alpm_pkg_validate_internal(handle, v.path, v.pkg,
 					v.level, &v.siglist, &v.validation) == -1) {
+			struct validity *invalid;
 			v.error = handle->pm_errno;
-			struct validity *invalid = malloc(sizeof(struct validity));
+			MALLOC(invalid, sizeof(struct validity), return -1);
 			memcpy(invalid, &v, sizeof(struct validity));
 			errors = alpm_list_add(errors, invalid);
 		} else {
-- 
1.9.0



More information about the pacman-dev mailing list