[pacman-dev] [PATCH 1/2] lib/libalpm/dload.c: Use STRDUP() instead of strdup()

Dan McGee dpmcgee at gmail.com
Thu Aug 18 08:44:00 EDT 2011


On Thu, Aug 18, 2011 at 2:42 AM, Lukas Fleischer
<archlinux at cryptocrack.de> wrote:
> Use the STRDUP macro instead of strdup() for the sake of better error
> handling on memory allocation failures.
>
> Signed-off-by: Lukas Fleischer <archlinux at cryptocrack.de>

Thanks- wrapped at 80 chars though.

> ---
> Should we do some cleanup and free() payload if STRDUP() fails in
> alpm_fetch_pkgurl()?

Even in this case, I'm not sure the immediate RET_ERR() is the best
thing to do. Instead you should probably set pm_errno and make sure
ret = -1, but not return right away so that the other cleanup logic
takes place (notably the signal handler restoration, didn't realize
that was so late).

In fetch_pkgurl(), you may want to add an error: label that is jumped
to instead of the RET_ERR() calls directly, and add the necessary
cleanup logic there, or something along those lines to ensure things
are unwound correctly. However, for the most part, we assume a memory
allocation failure is not something transient and we will eventually
die.

>  lib/libalpm/dload.c |    6 +++---
>  1 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
> index 68a68e9..a1b6364 100644
> --- a/lib/libalpm/dload.c
> +++ b/lib/libalpm/dload.c
> @@ -387,10 +387,10 @@ cleanup:
>                                                tempfile, destfile, strerror(errno));
>                                ret = -1;
>                        } else if(final_file) {
> -                               *final_file = strdup(strrchr(destfile, '/') + 1);
> +                               STRDUP(*final_file, strrchr(destfile, '/') + 1, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
>                        }
>                } else if(final_file) {
> -                       *final_file = strdup(strrchr(tempfile, '/') + 1);
> +                       STRDUP(*final_file, strrchr(tempfile, '/') + 1, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
>                }
>        }
>
> @@ -456,7 +456,7 @@ char SYMEXPORT *alpm_fetch_pkgurl(alpm_handle_t *handle, const char *url)
>
>        CALLOC(payload, 1, sizeof(*payload), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
>        payload->handle = handle;
> -       payload->fileurl = strdup(url);
> +       STRDUP(payload->fileurl, url, RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
>        payload->allow_resume = 1;
>
>        /* download the file */
> --
> 1.7.6
>
>
>


More information about the pacman-dev mailing list