Flurl icon indicating copy to clipboard operation
Flurl copied to clipboard

SetQueryParam strips leading slash in file URI with empty hostname

Open markmccaigue opened this issue 2 years ago • 4 comments

Hi,

I have written the below test to illustrate what I suspect is a problem with the handling of slashes with file URIs.

[Test]
public void FlurlUrl_PreservesLeadingSlash()
{
    var urlString = "file:///document";

    var flurl = new Url(urlString);

    Assert.AreEqual(urlString, flurl.ToString());

    var queryKey = "queryKey";
    var queryValue = "queryValue";
    flurl = flurl.SetQueryParam(queryKey, queryValue);

    Assert.AreEqual($"{urlString}?{queryKey}={queryValue}", flurl.ToString());
}

I would expect this test to pass, but instead it fails with the following message:

String lengths are both 36. Strings differ at index 7.
Expected: "file:///document?queryKey=queryValue"
But was:  "file://document/?queryKey=queryValue"

In summary, I believe Flurl is removing that third slash and inadvertently generating an invalid URI.

Many thanks for your help.

markmccaigue avatar May 04 '23 16:05 markmccaigue

Interesting. I'll be honest, I didn't know the triple-slash notation was a thing when I wrote the normalization logic. But it looks legitimate and I'll make sure it's not tampered with when specified.

In summary, I believe Flurl is removing that third slash and inadvertently generating an invalid URI.

Technically not correct to say it's an invalid URI, but it's certainly the URI you expected, so point taken. 😉

tmenier avatar May 23 '23 17:05 tmenier

note to self: https://superuser.com/a/352134

tmenier avatar May 23 '23 17:05 tmenier

Interesting. I'll be honest, I didn't know the triple-slash notation was a thing when I wrote the normalization logic. But it looks legitimate and I'll make sure it's not tampered with when specified.

In summary, I believe Flurl is removing that third slash and inadvertently generating an invalid URI.

Technically not correct to say it's an invalid URI, but it's certainly the URI you expected, so point taken. 😉

Haha fair enough 😁 Thanks a million!

markmccaigue avatar May 31 '23 19:05 markmccaigue