Skip to content

URIs.append silently drops ? when appending to URLs that already have a query string #3

Description

@dmolesUC

Steps to reproduce

base_url = 'https://adrl.test/resources?filter[keywords]=fruit&page[number]=2&page[size]=3
BerkeleyLibrary::Util::URIs.append(base_url, '?filter[foo]=bar')

Expected

Either:

  • raise URI::InvalidComponentError (might be too strict? see RFC 3986 §3.4), or

  • convert the ? to something legal, as:

    #<URI::HTTPS https://adrl.test/resources?filter[keywords]=fruit&page[number]=2&page[size]=3&filter[foo]=bar>

    (probably too magical)

    or

    #<URI::HTTPS https://adrl.test/resources?filter[foo]=bar&filter[keywords]=fruit&page[number]=2&page[size]=3>

    (maybe in the spirit of the way we allow appending path segments to a URL that already has a query?)

Actual

  • returns

    #<URI::HTTPS https://adrl.test/resources?filter[keywords]=fruit&page[number]=2&page[size]=3filter[foo]=bar>

    with ? deleted, so the appended text gets run into the last parameter value.

Notes

Note that this does not happen if you just append filter[foo]=bar without the ?; in that case it gets treated as an additional path component, and you get a somewhat cryptic InvalidComponentError:

bad component(expected absolute path component): /resources/filter[foo]=bar (URI::InvalidComponentError)

(not our message, it's generated by URI::Generic#check_path)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions