~ruther/guix-local

ecdb81e159a29c92351bc51c3556a760074f7473 — Ludovic Courtès 13 years ago db32c28
guix-download: Gracefully handle invalid URIs.

* guix-download.in (guix-download): Error out when `string->uri'
  returns #f.  Use `leave' when the scheme is unknown.
* tests/guix-download.sh: Add tests.
2 files changed, 11 insertions(+), 6 deletions(-)

M guix-download.in
M tests/guix-download.sh
M guix-download.in => guix-download.in +5 -6
@@ 159,16 159,15 @@ Report bugs to: ~a.~%") "@PACKAGE_BUGREPORT@"))

  (let* ((opts  (parse-options))
         (store (open-connection))
         (uri   (string->uri (assq-ref opts 'argument)))
         (uri   (or (string->uri (assq-ref opts 'argument))
                    (leave (_ "guix-download: ~a: failed to parse URI~%")
                           (assq-ref opts 'argument))))
         (fetch (case (uri-scheme uri)
                  ((http) http-fetch)
                  ((ftp)  ftp-fetch)
                  (else
                   (begin
                     (format (current-error-port)
                             (_ "guix-download: ~a: unsupported URI scheme~%")
                             (uri-scheme uri))
                     (exit 1)))))
                   (leave (_ "guix-download: ~a: unsupported URI scheme~%")
                          (uri-scheme uri)))))
         (path  (call-with-temporary-output-file
                 (lambda (name port)
                   (fetch uri port)

M tests/guix-download.sh => tests/guix-download.sh +6 -0
@@ 25,3 25,9 @@ guix-download --version
# Make sure it fails here.
if guix-download http://www.example.com/does-not-exist
then false; else true; fi

if guix-download unknown://some/where;
then false; else true; fi

if guix-download not/a/uri;
then false; else true; fi