diff options
author | Andy Wingo <wingo@pobox.com> | 2010-11-22 23:58:24 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-11-22 23:58:24 +0100 |
commit | a4342ba82655deecc8c001d7f457ebe8db01354e (patch) | |
tree | 80f5dcfeeb80001e39849df26db23b693e52691a | |
parent | 015a4aaedb9e8dd839b481bc83ac5b9f88e63a81 (diff) | |
download | guile-a4342ba82655deecc8c001d7f457ebe8db01354e.tar.gz |
fix up a couple content-length issues in web/server.scm:sanitize-response
* module/web/server.scm (sanitize-response): Allow body to be #f. Don't
require or insert a content-length if there is no body.
-rw-r--r-- | module/web/server.scm | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/module/web/server.scm b/module/web/server.scm index 83997d786..0d5bd40da 100644 --- a/module/web/server.scm +++ b/module/web/server.scm @@ -166,6 +166,8 @@ (cond ((list? response) (sanitize-response request (build-response #:headers response) body)) + ((not body) + (values response #vu8())) ((string? body) (let* ((type (response-content-type response '("text/plain"))) @@ -185,13 +187,14 @@ (sanitize-response request response (call-with-output-string body))) ((bytevector? body) ;; check length; assert type; add other required fields? - (values (let ((len (response-content-length response))) - (if len - (if (= len (bytevector-length body)) - response - (error "bad content-length" len (bytevector-length body))) - (extend-response response 'content-length - (bytevector-length body)))) + (values (let ((rlen (response-content-length response)) + (blen (bytevector-length body))) + (cond + ((rlen) (if (= rlen blen) + response + (error "bad content-length" rlen blen))) + ((zero? blen) response) + (else (extend-response response 'content-length blen)))) body)) (else (error "unexpected body type")))) |