Subject: bug#40582: closed (Re: bug#40582: Valid URIs are rejected)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 18 Jun 2020 15:09:02 +0000

Your bug report

#40582: Valid URIs are rejected

which was filed against the guile package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
40582: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=40582
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#40582: Valid URIs are rejected
From: Ludovic Courtès <[email-masked]>
To: Julien Lepiller <[email-masked]>
Cc: [email-masked]
Date: Thu, 18 Jun 2020 17:07:57 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

Julien Lepiller <[email-masked]> skribis:

> Le 17 juin 2020 17:57:33 GMT-04:00, "Ludovic Courtès" <[email-masked]> a écrit :

[...]

>>The regexp below is still an approximation, but I think a better one.
>>Can you confirm?
>>
>>Thanks,
>>Ludo’.
>
> Looks slightly better, thanks.
>
> That's still incorrect, as it will match things that are not ipv6 addresses. Does it have to be a regexp though? Why not simply check (false-if-exception (inet-pton AF_INET6 host)), as in the return value of valid-host?

Using a regexp makes the code closer to the RFC since the RFC explicitly
describes the grammar.  It’s also the simple choice here.

> There's also a ipv6-host-pat that has an incorrect regexp, but I'm not sure what it is used for.

It’s use for ‘authority-regexp’, but that one is fine: it requires
square brackets around IPv6 addresses.

Pushed as 1ab2105339f60dba20c8c9680e49110501f3a6a0.

Thanks,
Ludo’.

Subject: Valid URIs are rejected
From: Julien Lepiller <[email-masked]>
To: [email-masked]
Date: Sun, 12 Apr 2020 15:44:31 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

Using (web uri), I was trying to parse "uri://a/c". Reading RFC3986, it should be a valid URI (see rule for reg-name in 3.2.2). However, passing it to string->uri results in #f. I've tracked this down to valid-host? which returns #f for "a".

The reason is that the regexp checking if the host is an ipv6 matches "a", which shouldn't happen because a is not an ipv6 address. Indeed, when I try (string->uri "uri://g/b"), I get the expected result.