diff options
author | Lars-Dominik Braun <lars@6xq.net> | 2024-05-04 09:43:11 +0200 |
---|---|---|
committer | Sharlatan Hellseher <sharlatanus@gmail.com> | 2024-12-13 20:18:36 +0000 |
commit | 63cb43d56cab5cea439890056359434d89c2b611 (patch) | |
tree | 25da90e4976023605adfdb079537c968a762d1a6 | |
parent | b59cdd59eba7567f21593e8ab21e595dac7aeff4 (diff) |
guix: toml: Fix parsing empty strings in arrays.
Change-Id: Id14d4008391a01820ade754fa9c2ca8e88b8c7f9
-rw-r--r-- | guix/build/toml.scm | 15 | ||||
-rw-r--r-- | tests/toml.scm | 27 |
2 files changed, 36 insertions, 6 deletions
diff --git a/guix/build/toml.scm b/guix/build/toml.scm index d5ea01d001..81b54fa5b7 100644 --- a/guix/build/toml.scm +++ b/guix/build/toml.scm @@ -97,7 +97,7 @@ ;; Basic String (define-peg-pattern basic-string body (and (ignore "\"") - (* basic-char) + (or (+ basic-char) "") (ignore "\""))) (define-peg-pattern basic-char body (or basic-unescaped escaped)) (define-peg-pattern basic-unescaped body (or wschar @@ -116,9 +116,11 @@ ;; Multiline Basic String (define-peg-pattern ml-basic-string body (and - ml-basic-string-delim + ml-basic-string-delim (? ignore-newline) - ml-basic-body + ;; Force the result of the empty string + ;; to be a string, not no token. + (and ml-basic-body "") ml-basic-string-delim)) (define-peg-pattern ml-basic-string-delim none "\"\"\"") (define-peg-pattern ml-basic-body body (and @@ -145,7 +147,7 @@ ;; Literal String (define-peg-pattern literal-string body (and (ignore "'") - (* literal-char) + (or (+ literal-char) "") (ignore "'"))) (define-peg-pattern literal-char body (or "\x09" (range #\x20 #\x26) @@ -156,7 +158,9 @@ (define-peg-pattern ml-literal-string body (and ml-literal-string-delim (? ignore-newline) - ml-literal-body + ;; Force the result of the empty string + ;; to be a string, not no token. + (and ml-literal-body "") ml-literal-string-delim)) (define-peg-pattern ml-literal-string-delim none "'''") (define-peg-pattern ml-literal-body body (and @@ -475,4 +479,3 @@ the list KEY. For instance a KEY (a b) would retrieve alist[a][b]." "Parse and evaluate toml document from file FILE." (parse-toml (call-with-input-file file get-string-all))) - diff --git a/tests/toml.scm b/tests/toml.scm index cd731cd2f0..cd8e4d2338 100644 --- a/tests/toml.scm +++ b/tests/toml.scm @@ -305,6 +305,33 @@ integers3 = [ 2, # this is ok ]")) +(test-equal "parse-toml: Arrays of empty strings" + '(("empty1" "") + ("empty2" "" "") + ("empty3" "" "" "") + ("emptyraw1" "") + ("emptyraw2" "" "") + ("emptyraw3" "" "" "") + ("emptyml1" "") + ("emptyml2" "" "") + ("emptyml3" "" "" "") + ("emptyrawml1" "") + ("emptyrawml2" "" "") + ("emptyrawml3" "" "" "")) + (parse-toml "empty1 = [ \"\" ] +empty2 = [ \"\", \"\" ] +empty3 = [ \"\", \"\", \"\" ] +emptyraw1 = [ '' ] +emptyraw2 = [ '', '' ] +emptyraw3 = [ '', '', '' ] +emptyml1 = [ \"\"\"\"\"\" ] +emptyml2 = [ \"\"\"\"\"\", \"\"\"\"\"\" ] +emptyml3 = [ \"\"\"\"\"\", \"\"\"\"\"\", \"\"\"\"\"\" ] +emptyrawml1 = [ '''''' ] +emptyrawml2 = [ '''''', '''''' ] +emptyrawml3 = [ '''''', '''''', '''''' ] +")) + (test-equal "parse-toml: Tables" '(("table-1" ("key1" . "some string") ("key2" . 123)) |