summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Stoeckmann <tobias@stoeckmann.org>2016-06-05 19:23:31 +0200
committerAndrew Gregory <andrew.gregory.8@gmail.com>2017-05-08 23:27:40 -0400
commite03c5392883a39be1bf46a4d5811d2c46359d196 (patch)
tree46740d1f01d515e91637b80bd6818524310de658
parentf31792adb5fc9ba9a4c6f14a6520282702f17b71 (diff)
downloadpacman-e03c5392883a39be1bf46a4d5811d2c46359d196.tar.xz
Always use proper error code in alpm_initialize.
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 <tobias@stoeckmann.org> Signed-off-by: Allan McRae <allan@archlinux.org> (cherry picked from commit 80d97fcf7526f16d9eb097b8061956662207ed78)
-rw-r--r--lib/libalpm/alpm.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c
index 6f029132..6b7fa7a9 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;