summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2010-11-22 23:58:24 +0100
committerAndy Wingo <wingo@pobox.com>2010-11-22 23:58:24 +0100
commita4342ba82655deecc8c001d7f457ebe8db01354e (patch)
tree80f5dcfeeb80001e39849df26db23b693e52691a
parent015a4aaedb9e8dd839b481bc83ac5b9f88e63a81 (diff)
downloadguile-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.scm17
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"))))