summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvy Foster <ivy.foster@gmail.com>2016-09-08 21:03:50 -0500
committerAllan McRae <allan@archlinux.org>2016-09-09 14:59:58 +1000
commit900a22b90c8f8c76b6d5acde9c1d55d7ba65afdb (patch)
treeb30c9933bbae30bdc8e700d15a18d652ead9c53d
parent38e229e4dbcfe2aacbf9c5414432407f4f73bfc1 (diff)
downloadpacman-900a22b90c8f8c76b6d5acde9c1d55d7ba65afdb.tar.xz
lib/libalpm/be_sync.c: Close memory leaks when mallocing while out of memory
Signed-off-by: Ivy Foster <ivy.foster@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--lib/libalpm/be_sync.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index 32a669db..06f96199 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -231,8 +231,13 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
/* print server + filename into a buffer */
len = strlen(server) + strlen(db->treename) + strlen(dbext) + 2;
- /* TODO fix leak syncpath and umask unset */
- MALLOC(payload.fileurl, len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
+ MALLOC(payload.fileurl, len,
+ {
+ free(syncpath);
+ umask(oldmask);
+ RET_ERR(handle, ALPM_ERR_MEMORY, -1);
+ }
+ );
snprintf(payload.fileurl, len, "%s/%s%s", server, db->treename, dbext);
payload.handle = handle;
payload.force = force;
@@ -271,8 +276,13 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
len = strlen(server) + strlen(db->treename) + strlen(dbext) + 6;
}
- /* TODO fix leak syncpath and umask unset */
- MALLOC(payload.fileurl, len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
+ MALLOC(payload.fileurl, len,
+ {
+ free(syncpath);
+ umask(oldmask);
+ RET_ERR(handle, ALPM_ERR_MEMORY, -1);
+ }
+ );
if(final_db_url != NULL) {
snprintf(payload.fileurl, len, "%s.sig", final_db_url);