From 61fe8eafc236e2f76259e987d66f43e97fc1eed4 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Thu, 22 Dec 2011 08:18:05 -0500 Subject: [PATCH] HTTP: Fix qstring writing of cache-extension values * module/web/http.scm ("Cache-Control"): Write string values using the default val writer, to get quoting correct. * test-suite/tests/web-http.test (pass-if-round-trip): New helper. ("general headers"): Check that cache-extensions round trip properly. --- module/web/http.scm | 2 +- test-suite/tests/web-http.test | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/module/web/http.scm b/module/web/http.scm index 20ea2aa6b..afe70a7fd 100644 --- a/module/web/http.scm +++ b/module/web/http.scm @@ -1261,7 +1261,7 @@ phrase\"." (or (not v) (string? v))))) (lambda (k v port) (cond - ((string? v) (display v port)) + ((string? v) (default-val-writer k v port)) ((pair? v) (display #\" port) (write-header-list v port) diff --git a/test-suite/tests/web-http.test b/test-suite/tests/web-http.test index b5247ab5c..79845653e 100644 --- a/test-suite/tests/web-http.test +++ b/test-suite/tests/web-http.test @@ -45,6 +45,18 @@ val) (valid-header? 'sym val)))))) +(define-syntax pass-if-round-trip + (syntax-rules () + ((_ str) + (pass-if (format #f "~s round trip" str) + (equal? (call-with-output-string + (lambda (port) + (call-with-values + (lambda () (read-header (open-input-string str))) + (lambda (sym val) + (write-header sym val port))))) + str))))) + (define-syntax pass-if-any-error (syntax-rules () ((_ sym str) @@ -85,6 +97,10 @@ '(no-cache (max-age . 10))) (pass-if-parse cache-control "max-stale" '(max-stale)) (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-parse connection "close" '(close)) (pass-if-parse connection "Content-Encoding" '(content-encoding))