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);
>