guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2 3/4] Check that key/value parameters in HTTP headers are quote


From: Vivien Kraus
Subject: [PATCH v2 3/4] Check that key/value parameters in HTTP headers are quoted in needed.
Date: Sat, 28 Oct 2023 12:20:43 +0200
User-agent: Evolution 3.46.4

If the value has a space, it should be quoted. In headers with a simple
list of strings, the parser would not stop for space, but
“key=value and value;” parameters must be quoted, otherwise the parser
will expect “and” to be a new token.

* test-suite/tests/web-http.test ("general headers"): Test it on
Content-Disposition.
[Cache-Control test]: Adjust for round-trip.
---
 module/web/http.scm            | 3 ++-
 test-suite/tests/web-http.test | 4 +++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/module/web/http.scm b/module/web/http.scm
index b34159aab..195265dfd 100644
--- a/module/web/http.scm
+++ b/module/web/http.scm
@@ -498,7 +498,8 @@ as an ordered alist."
 (define (default-val-writer k val port)
   (if (or (string-index val #\;)
           (string-index val #\,)
-          (string-index val #\"))
+          (string-index val #\")
+          (string-index val #\space))
       (write-qstring val port)
       (put-string port val)))
 
diff --git a/test-suite/tests/web-http.test b/test-suite/tests/web-http.test
index 06dd9479c..b73d72ced 100644
--- a/test-suite/tests/web-http.test
+++ b/test-suite/tests/web-http.test
@@ -242,7 +242,7 @@
   (pass-if-parse cache-control "max-stale=10" '((max-stale . 10)))
   (pass-if-round-trip "Cache-Control: acme-cache-extension\r\n")
   (pass-if-round-trip "Cache-Control: acme-cache-extension=20\r\n")
-  (pass-if-round-trip "Cache-Control: acme-cache-extension=100 quux\r\n")
+  (pass-if-round-trip "Cache-Control: acme-cache-extension=\"100 quux\"\r\n")
   (pass-if-round-trip "Cache-Control: acme-cache-extension=\"100, quux\"\r\n")
 
   (pass-if-parse connection "close" '(close))
@@ -295,6 +295,8 @@
   (pass-if-parse allow "foo, bar" '(foo bar))
   (pass-if-parse content-disposition "form-data; name=\"file\"; 
filename=\"q.go\""
                  '(form-data (name . "file") (filename . "q.go")))
+  (pass-if-parse content-disposition "form-data; name=\"file with space\"; 
filename=\"q.go\""
+                 '(form-data (name . "file with space") (filename . "q.go")))
   (pass-if-parse content-encoding "qux, baz" '(qux baz))
   (pass-if-parse content-language "qux, baz" '("qux" "baz"))
   (pass-if-parse content-length "100" 100)
-- 
2.41.0



reply via email to

[Prev in Thread] Current Thread [Next in Thread]