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.
This commit is contained in:
Ludovic Courtès 2012-11-13 22:13:11 +01:00
parent db32c281dd
commit ecdb81e159
2 changed files with 11 additions and 6 deletions

View file

@ -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)

View file

@ -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