Subject: [bug#70494] [PATCH 09/23] store: Add validate-store-name.

From: Christopher Baines <[email-masked]>
Date: Sun, 21 Apr 2024 10:42:27 +0100

* guix/store.scm (validate-store-name): New procedure.

Change-Id: I507d070d1cfdbd433d93830ee2937b1a1dee315a
---
 guix/store.scm | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/guix/store.scm b/guix/store.scm
index b83f205096..096efcd128 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -205,6 +205,7 @@ (define-module (guix store)
             store-path-package-name
             store-path-hash-part
             direct-store-path
+            validate-store-name
             derivation-log-file
             log-file))
 
@@ -2303,6 +2304,16 @@ (define (store-path? path)
   ;; `isStorePath' in Nix does something similar.
   (string-prefix? (%store-prefix) path))
 
+(define (validate-store-name name)
+  (string-for-each
+   (lambda (c)
+     (unless (or (char-alphabetic? c)
+                 (char-numeric? c)
+                 (member c '(#\+ #\- #\. #\_ #\? #\=)))
+       (error (simple-format #f "invalid character ~A" c))))
+   name)
+  #t)
+
 (define (direct-store-path? path)
   "Return #t if PATH is a store path, and not a sub-directory of a store path.
 This predicate is sometimes needed because files *under* a store path are not
-- 
2.41.0