[pacman-dev] [PATCH] Always use proper error code in alpm_initialize.
Andrew Gregory
andrew.gregory.8 at gmail.com
Mon Jun 6 05:27:37 UTC 2016
On 06/05/16 at 07:23pm, Tobias Stoeckmann wrote:
> 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 at stoeckmann.org>
> ---
> lib/libalpm/alpm.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
ACK.
> 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
More information about the pacman-dev
mailing list