From: Hartmut Goebel <h.goebel@crazy-compilers.com>
To: 36976@debbugs.gnu.org
Subject: [bug#36976] [PATCH 1/1] download: Map file-name characters not allowed in store.
Date: Thu, 8 Aug 2019 16:44:48 +0200 [thread overview]
Message-ID: <20190808144448.25147-1-h.goebel@crazy-compilers.com> (raw)
In the file-name to be used for storing into the store, replace any
character not allowed in the store-file-name by an underscore.
This is only done when NAME is not given and thus defaults to
toe URL's basename. If NAME is given, this is used unchanged,
allowing for more control by other functions.
Fixes <http://issues.guix.gnu.org/issue/26175>
* guix/download.scm (safe-name): New function.
(download-to-store): NAME defaults to the "safe" basename of URL.
---
guix/download.scm | 25 ++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/guix/download.scm b/guix/download.scm
index b24aaa0a86..249f612237 100644
--- a/guix/download.scm
+++ b/guix/download.scm
@@ -6,6 +6,7 @@
;;; Copyright © 2016 David Craven <david@craven.ch>
;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2019 Guy Fleury Iteriteka <hoonandon@gmail.com>
+;;; Copyright © 2019 Hartmut Goeel <h.goebel@crazy-compilers.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -563,13 +564,27 @@ own. This helper makes it easier to deal with \"zip bombs\"."
#:graft? #f
#:local-build? #t)))
-(define* (download-to-store store url #:optional (name (basename url))
+(define (safe-name name)
+ "Replace any character not allowed in a stroe name by an underscore."
+
+ (define valid-characters
+ ;; according to nix/libstore/store-api.cc
+ (string->list (string-append "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789" "+-._?=")))
+ (string-map (lambda (c)
+ (if (member c valid-characters) c #\_))
+ name))
+
+(define* (download-to-store store url
+ #:optional (name (safe-name (basename url)))
#:key (log (current-error-port)) recursive?
(verify-certificate? #t))
- "Download from URL to STORE, either under NAME or URL's basename if
-omitted. Write progress reports to LOG. RECURSIVE? has the same effect as
-the same-named parameter of 'add-to-store'. VERIFY-CERTIFICATE? determines
-whether or not to validate HTTPS server certificates."
+ "Download from URL to STORE, either under NAME. If NAME is omitted, URL's
+basename with invalid characters replaced is used. Write progress reports to
+LOG. RECURSIVE? has the same effect as the same-named parameter of
+'add-to-store'. VERIFY-CERTIFICATE? determines whether or not to validate
+HTTPS server certificates."
(define uri
(string->uri url))
--
2.21.0
next reply other threads:[~2019-08-08 14:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-08 14:44 Hartmut Goebel [this message]
2019-08-23 21:08 ` [bug#36976] [PATCH 1/1] download: Map file-name characters not allowed in store Ludovic Courtès
2019-08-27 7:53 ` Hartmut Goebel
2019-09-01 19:39 ` Ludovic Courtès
2019-09-26 15:50 ` bug#36976: " Hartmut Goebel
2019-09-03 16:20 ` [bug#36976] [Patch v2] guix download: Ensure destination file-name is valid in the store Hartmut Goebel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190808144448.25147-1-h.goebel@crazy-compilers.com \
--to=h.goebel@crazy-compilers.com \
--cc=36976@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).