[pacman-dev] [PATCH v2 1/2] libalpm: Do a sanity check before manipulating final DB URL
Allan McRae
allan at archlinux.org
Tue May 12 03:56:04 UTC 2015
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);
>
More information about the pacman-dev
mailing list