On 18/04/15 01:31, David Macek wrote:
> The change in commit 9d96bed9d6b57 causes download errors for the .db.sig file
> in case the final URL for the .db file contains query strings or other
> unexpected stuff. This commit isn't intended to be a total solution, but it
> should eliminate the problem in the most obvious cases.
> ---
>  lib/libalpm/be_sync.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
> index 20130dc..606c4a0 100644
> --- a/lib/libalpm/be_sync.c
> +++ b/lib/libalpm/be_sync.c
> @@ -241,9 +241,16 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
>                       unlink(sigpath);
>                       free(sigpath);
>  
> -                     /* if we downloaded a DB, we want the .sig from the 
> same server -
> -                        this information is only available from the internal 
> downloader */
> -                     if(handle->fetchcb == NULL) {
> +
> +                     /* check if the final URL from internal downloader 
> looks reasonable */
> +                     if(final_db_url != NULL) {
> +                             if(strlen(final_db_url) < 3 || 
> strcmp(final_db_url + strlen(final_db_url) - 3, ".db") != 0) {
> +                                     final_db_url = NULL;
> +                             }
> +                     }
> +
> +                     /* if we downloaded a DB, we want the .sig from the 
> same server */
> +                     if(final_db_url != NULL) {

I am fairly certain this is OK...   but there is a nagging feeling that
I am missing something in the change:

 -                      if(handle->fetchcb == NULL) {
 +                      if(final_db_url != NULL) {


@Dave: any chance you could take a very quick glance at this?


>                               /* print final_db_url into a buffer (leave 
> space for .sig) */
>                               len = strlen(final_db_url) + 5;
>                       } else {
> @@ -254,7 +261,7 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
>                       /* TODO fix leak syncpath and umask unset */
>                       MALLOC(payload.fileurl, len, RET_ERR(handle, 
> ALPM_ERR_MEMORY, -1));
>  
> -                     if(handle->fetchcb == NULL) {
> +                     if(final_db_url != NULL) {
>                               snprintf(payload.fileurl, len, "%s.sig", 
> final_db_url);
>                       } else {
>                               snprintf(payload.fileurl, len, "%s/%s.db.sig", 
> server, db->treename);
> 

Reply via email to