on master help sign in
Fix issue: chunked body when content-length present
commit4801435877b0eaf5401fe5b0870851ca03a868f8 authorMichael Snoyman <michael@snoyman.com> dateFri 23 May 2014, 07:03 (12 years ago) parente74d694
2 files changed+11−1
warp/Network/Wai/Handler/Warp/Response.hs+4−1 warp/test/RunSpec.hs+7
warp/Network/Wai/Handler/Warp/Response.hs+4−1
@@ -249,8 +249,11 @@ sendRsp conn ver s hs (RspStream withBodyFlush needsChunked th) = do
249249 connSink conn th bs
250250 loop
251251 loop
252+ addChunk'
253+ | needsChunked = addChunk . chunkedTransferEncoding
254+ | otherwise = addChunk
252255 addChunk header
253− withBodyFlush (addChunk . chunkedTransferEncoding) (addChunk flush)
256+ withBodyFlush addChunk' (addChunk' flush)
254257 when needsChunked $ addChunk chunkedTransferTerminator
255258 mbs <- finish
256259 maybe (return ()) (connSink conn th) mbs
warp/test/RunSpec.hs+7
@@ -369,6 +369,13 @@ spec = do
369369 bs <- safeRecv socket 4096
370370 S.takeWhile (/= 13) bs `shouldBe` "HTTP/1.1 200 OK"
371371
372+ it "streaming response with length" $ do
373+ let app _ f = f $ responseStream status200 [("content-length", "20")] $ \write _ -> do
374+ replicateM_ 4 $ write $ fromByteString "Hello"
375+ withApp defaultSettings app $ \port -> do
376+ Right res <- HTTP.simpleHTTP (HTTP.getRequest $ "http://127.0.0.1:" ++ show port)
377+ HTTP.rspBody res `shouldBe` "HelloHelloHelloHello"
378+
372379consumeBody :: IO ByteString -> IO [ByteString]
373380consumeBody body =
374381 loop id