1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

fix response-body-port for responses without content-length

* module/web/response.scm (response-body-port): Correctly handle cases
  in which EOF terminates the body.
This commit is contained in:
Jason Earl 2013-03-10 19:23:31 +01:00 committed by Andy Wingo
parent 94c53e0601
commit 84dfde82ae

View file

@ -273,13 +273,26 @@ body is available.
When KEEP-ALIVE? is #f, closing the returned port also closes R's
response port."
(define port
(if (member '(chunked) (response-transfer-encoding r))
(make-chunked-input-port (response-port r)
#:keep-alive? keep-alive?)
(let ((len (response-content-length r)))
(and len
(make-delimited-input-port (response-port r)
len keep-alive?)))))
(cond
((member '(chunked) (response-transfer-encoding r))
(make-chunked-input-port (response-port r)
#:keep-alive? keep-alive?))
((response-content-length r)
=> (lambda (len)
(make-delimited-input-port (response-port r)
len keep-alive?)))
((response-must-not-include-body? r)
#f)
((or (memq 'close (response-connection r))
(and (equal? (response-version r) '(1 . 0))
(not (memq 'keep-alive (response-connection r)))))
(response-port r))
(else
;; Here we have a message with no transfer encoding, no
;; content-length, and a response that won't necessarily be closed
;; by the server. Not much we can do; assume that the client
;; knows how to handle it.
(response-port r))))
(when (and decode? port)
(match (response-content-type r)