In out of memory conditions, an undefined error value is written
into *err, because myerr is never explicitly set in these cases.

I have also converted a calloc into a MALLOC call, because the memory
will be properly filled by the snprintf call right after it.

Signed-off-by: Tobias Stoeckmann <[email protected]>
---
 lib/libalpm/alpm.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c
index 6f02913..6b7fa7a 100644
--- a/lib/libalpm/alpm.c
+++ b/lib/libalpm/alpm.c
@@ -55,8 +55,7 @@ alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, 
const char *dbpath,
        alpm_handle_t *myhandle = _alpm_handle_new();
 
        if(myhandle == NULL) {
-               myerr = ALPM_ERR_MEMORY;
-               goto cleanup;
+               goto nomem;
        }
        if((myerr = _alpm_set_directory_option(root, &(myhandle->root), 1))) {
                goto cleanup;
@@ -68,15 +67,15 @@ alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, 
const char *dbpath,
        /* to contatenate myhandle->root (ends with a slash) with SYSHOOKDIR 
(starts
         * with a slash) correctly, we skip SYSHOOKDIR[0]; the regular +1 
therefore
         * disappears from the allocation */
-       MALLOC(hookdir, strlen(myhandle->root) + strlen(SYSHOOKDIR), goto 
cleanup);
+       MALLOC(hookdir, strlen(myhandle->root) + strlen(SYSHOOKDIR), goto 
nomem);
        sprintf(hookdir, "%s%s", myhandle->root, SYSHOOKDIR + 1);
        myhandle->hookdirs = alpm_list_add(NULL, hookdir);
 
        /* set default database extension */
-       STRDUP(myhandle->dbext, ".db", goto cleanup);
+       STRDUP(myhandle->dbext, ".db", goto nomem);
 
        lockfilelen = strlen(myhandle->dbpath) + strlen(lf) + 1;
-       myhandle->lockfile = calloc(lockfilelen, sizeof(char));
+       MALLOC(myhandle->lockfile, lockfilelen, goto nomem);
        snprintf(myhandle->lockfile, lockfilelen, "%s%s", myhandle->dbpath, lf);
 
        if(_alpm_db_register_local(myhandle) == NULL) {
@@ -90,9 +89,11 @@ alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, 
const char *dbpath,
 
        return myhandle;
 
+nomem:
+       myerr = ALPM_ERR_MEMORY;
 cleanup:
        _alpm_handle_free(myhandle);
-       if(err && myerr) {
+       if(err) {
                *err = myerr;
        }
        return NULL;
-- 
2.8.3

Reply via email to