On 17/6/21 11:14 am, morganamilo wrote:
> If the original download redirects to to a different url then alpm would
> try to name the sig file after the url instead of <original_file>.sig.
> Instead force this naming scheme regardless of url.
> 
> Fixes FS#71274


This patch looks good to me.

Allan

> ---
>  lib/libalpm/dload.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
> index 2c14841f..ca6be7b6 100644
> --- a/lib/libalpm/dload.c
> +++ b/lib/libalpm/dload.c
> @@ -614,6 +614,7 @@ static int curl_check_finished_download(CURLM *curlm, 
> CURLMsg *msg,
>       if(!payload->signature && payload->download_signature && curlerr == 
> CURLE_OK && payload->respcode < 400) {
>               struct dload_payload *sig = NULL;
>  
> +             const char* realname = payload->destfile_name ? 
> payload->destfile_name : payload->tempfile_name;
>               int len = strlen(effective_url) + 5;
>               CALLOC(sig, 1, sizeof(*sig), GOTO_ERR(handle, ALPM_ERR_MEMORY, 
> cleanup));
>               MALLOC(sig->fileurl, len, FREE(sig); GOTO_ERR(handle, 
> ALPM_ERR_MEMORY, cleanup));
> @@ -623,13 +624,18 @@ static int curl_check_finished_download(CURLM *curlm, 
> CURLMsg *msg,
>                       /* In this case server might provide a new name for the 
> main payload.
>                        * Choose *.sig filename based on this new name.
>                        */
> -                     const char* realname = payload->destfile_name ? 
> payload->destfile_name : payload->tempfile_name;
>                       const char *final_file = get_filename(realname);
>                       int remote_name_len = strlen(final_file) + 5;
>                       MALLOC(sig->remote_name, remote_name_len, 
> FREE(sig->fileurl); FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
>                       snprintf(sig->remote_name, remote_name_len, "%s.sig", 
> final_file);
>               }
>  
> +             /* force the filename to be realname + ".sig" */
> +             int destfile_name_len = strlen(realname) + 5;
> +             MALLOC(sig->destfile_name, destfile_name_len, 
> FREE(sig->remote_name);
> +                             FREE(sig->fileurl); FREE(sig); GOTO_ERR(handle, 
> ALPM_ERR_MEMORY, cleanup));
> +             snprintf(sig->destfile_name, destfile_name_len, "%s.sig", 
> realname);
> +
>               sig->signature = 1;
>               sig->handle = handle;
>               sig->force = payload->force;
> @@ -762,7 +768,9 @@ static int curl_add_payload(alpm_handle_t *handle, CURLM 
> *curlm,
>       }
>  
>       if(payload->remote_name && strlen(payload->remote_name) > 0) {
> -             payload->destfile_name = get_fullpath(localpath, 
> payload->remote_name, "");
> +             if(!payload->destfile_name) {
> +                     payload->destfile_name = get_fullpath(localpath, 
> payload->remote_name, "");
> +             }
>               payload->tempfile_name = get_fullpath(localpath, 
> payload->remote_name, ".part");
>               if(!payload->destfile_name || !payload->tempfile_name) {
>                       goto cleanup;
> 

Reply via email to