Also fixes a memory leak under an error condition.

Signed-off-by: Allan McRae <[email protected]>
---
 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

Reply via email to