Subject: bug#55367: guix refresh fails. struct-vtable: Wrong type argument in position 1 (expecting struct)

From: Ludovic Courtès <[email-masked]>
Date: Thu, 12 May 2022 10:18:24 +0200

Hi,

Maxime Devos <[email-masked]> skribis:

> Ludovic Courtès schreef op wo 11-05-2022 om 15:49 [+0200]:
>> The code at guix/gnu-maintenance.scm:188:20 checks a URI, so my guess is
>> that the source of that package is not a valid URI, and thus
>> ‘string->uri’ returns #false.
>
> It's "gogdownloader://world_of_goo/en3installer0".
>
> (string->uri "gogdownloader://world_of_goo/en3installer0")
> $1 = #f
> (string->uri "gogdownloader://worldofgoo/en3installer0")
> $2 = #f

The second one works for me:

--8<---------------cut here---------------start------------->8---
scheme@(guile-user)>  (string->uri "gogdownloader://worldofgoo/en3installer0")
$7 = #<<uri> scheme: gogdownloader userinfo: #f host: "worldofgoo" port: #f path: "/en3installer0" query: #f fragment: #f>
--8<---------------cut here---------------end--------------->8---

The first one has an invalid authority part, which doesn’t match
‘authority-regexp’ (underscores are not permitted; I believe (web uri)
is correct here.)

> Worse, looks like non-ASCII characters (that are valid DNS names, at
> least ignoring punycode encodings and such) aren't supported:
>
> (string->uri "https://www.étoile.fr")
> $3 = #f

Right; I think ‘string->uri’ expects a Punycode-encoded string, which is
probably correct per RFC 3986.

That said, it’s beyond this scope of this bug report.

To me, the conclusion is that the package has a invalid URI, so it’s not
a Guix bug strictly speaking.  However, we could change
gnu-maintenance.scm so that it deals with invalid URIs gracefully.

Thoughts?

Ludo’.