Package: guile Version: 2.0.3 Tags: patch Many of the list-style headers from (web http) do not validate correctly. The test suite only checks that the header's parse and does not test the associated validators. Attached is a very quick patch (0002) which exposes the failing validators through the test-suite: $ ./guile-test tests/web-http.test Running tests/web-http.test ... FAIL: tests/web-http.test: general headers: cache-control: "no-transform" -> (no-transform) FAIL: tests/web-http.test: general headers: cache-control: "no-transform,foo" -> (no-transform foo) FAIL: tests/web-http.test: general headers: cache-control: "no-cache" -> (no-cache) FAIL: tests/web-http.test: general headers: cache-control: "no-cache=\"Authorization, Date\"" -> ((no-cache authorization date)) FAIL: tests/web-http.test: general headers: cache-control: "private=\"Foo\"" -> ((private foo)) FAIL: tests/web-http.test: general headers: cache-control: "no-cache,max-age=10" -> (no-cache (max-age . 10)) FAIL: tests/web-http.test: general headers: pragma: "no-cache" -> (no-cache) FAIL: tests/web-http.test: general headers: pragma: "no-cache, foo" -> (no-cache foo) FAIL: tests/web-http.test: general headers: transfer-encoding: "foo, chunked" -> ((foo) (chunked)) FAIL: tests/web-http.test: entity headers: allow: "foo, bar" -> (foo bar) FAIL: tests/web-http.test: entity headers: content-encoding: "qux, baz" -> (qux baz) FAIL: tests/web-http.test: request headers: accept: "text/*;q=0.3, text/html;q=0.7, text/html;level=1" -> ((text/* (q . 300)) (text/html (q . 700)) (text/html (level . "1"))) FAIL: tests/web-http.test: request headers: authorization: "Basic foooo" -> (basic . "foooo") FAIL: tests/web-http.test: request headers: authorization: "Digest foooo" -> (digest foooo) FAIL: tests/web-http.test: request headers: expect: "100-continue, foo" -> ((#{100-continue}#) (foo)) FAIL: tests/web-http.test: request headers: proxy-authorization: "Basic foooo" -> (basic . "foooo") FAIL: tests/web-http.test: request headers: proxy-authorization: "Digest foooo" -> (digest foooo) FAIL: tests/web-http.test: request headers: te: "trailers" -> ((trailers)) FAIL: tests/web-http.test: request headers: te: "trailers,foo" -> ((trailers) (foo)) FAIL: tests/web-http.test: response headers: accept-ranges: "foo,bar" -> (foo bar) Totals for this test run: passes: 60 failures: 20 ... The other patch (0001) corrects `http.scm' for some typos and missing logic, after which the above failures no longer occur. $ ./guile-test tests/web-http.test Running tests/web-http.test ... Totals for this test run: passes: 80 failures: 0 ... 0001 (web http): fix validators for various list-style headers * module/web/http.scm (default-val-validator): Valid with no value. (key-value-list?): Keys are always symbols, do not accept strings. (validate-param-list): Apply `valid?' to list elements. (validate-credentials): Validate param for Basic scheme, which is parsed as a string. (declare-symbol-list-header!): `list-of?' args were in wrong order. ("Cache-Control"): Replace `default-val-validator' with more specific procedure. ("Accept"): Validate on first param which has no value. --- module/web/http.scm | 26 ++++++++++++++++++-------- 1 files changed, 18 insertions(+), 8 deletions(-)