Also fixes a memory leak under an error condition.
Signed-off-by: Allan McRae <allan(a)archlinux.org>
---
lib/libalpm/be_sync.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index 041b2266..5502d92d 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -215,7 +215,7 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
RET_ERR(handle, ALPM_ERR_HANDLE_LOCK, -1);
}
- dbext = db->handle->dbext;
+ dbext = handle->dbext;
for(i = db->servers; i; i = i->next) {
const char *server = i->data, *final_db_url = NULL;
@@ -232,9 +232,9 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
len = strlen(server) + strlen(db->treename) + strlen(dbext) + 2;
MALLOC(payload.fileurl, len,
{
- free(syncpath);
- umask(oldmask);
- RET_ERR(handle, ALPM_ERR_MEMORY, -1);
+ handle->pm_errno = ALPM_ERR_MEMORY;
+ ret = -1;
+ goto cleanup;
}
);
snprintf(payload.fileurl, len, "%s/%s%s", server, db->treename, dbext);
@@ -250,8 +250,9 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
/* an existing sig file is no good at this point */
char *sigpath = _alpm_sigpath(handle, _alpm_db_path(db));
if(!sigpath) {
+ /* pm_errno should be set */
ret = -1;
- break;
+ goto cleanup;
}
unlink(sigpath);
free(sigpath);
@@ -277,9 +278,9 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
MALLOC(payload.fileurl, len,
{
- free(syncpath);
- umask(oldmask);
- RET_ERR(handle, ALPM_ERR_MEMORY, -1);
+ handle->pm_errno = ALPM_ERR_MEMORY;
+ ret = -1;
+ goto cleanup;
}
);
@@ -324,6 +325,7 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
}
}
+cleanup:
if(ret == -1) {
/* pm_errno was set by the download code */
_alpm_log(handle, ALPM_LOG_DEBUG, "failed to sync db: %s\n",
--
2.24.1