diff options
author | Ivy Foster <ivy.foster@gmail.com> | 2016-09-09 04:03:50 +0200 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2016-09-09 06:59:58 +0200 |
commit | 900a22b90c8f8c76b6d5acde9c1d55d7ba65afdb (patch) | |
tree | b30c9933bbae30bdc8e700d15a18d652ead9c53d | |
parent | 38e229e4dbcfe2aacbf9c5414432407f4f73bfc1 (diff) | |
download | pacman-900a22b90c8f8c76b6d5acde9c1d55d7ba65afdb.tar.gz pacman-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.c | 18 |
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); |