diff --git a/Network/Wai/Handler/Warp/Request.hs b/Network/Wai/Handler/Warp/Request.hs
--- a/Network/Wai/Handler/Warp/Request.hs
+++ b/Network/Wai/Handler/Warp/Request.hs
@@ -165,11 +165,12 @@
 close = throwIO IncompleteHeaders
 
 push :: THStatus -> ByteString -> Sink ByteString IO (Maybe ByteString, [ByteString])
-push (THStatus len lines prepend) bs
+push (THStatus len lines prepend) bs'
         -- Too many bytes
         | len > maxTotalHeaderLength = throwIO OverLargeHeader
         | otherwise = push' mnl
   where
+    bs = prepend bs'
     bsLen = S.length bs
     mnl = do
         nl <- S.elemIndex 10 bs
@@ -191,13 +192,13 @@
     push' Nothing = await >>= maybe close (push status)
       where
         len' = len + bsLen
-        prepend' = prepend . S.append bs
+        prepend' = S.append bs
         status = THStatus len' lines prepend'
     -- Found a newline, but next line continues as a multiline header
     push' (Just (end, True)) = push status rest
       where
         rest = S.drop (end + 1) bs
-        prepend' = prepend . S.append (SU.unsafeTake (checkCR bs end) bs)
+        prepend' = S.append (SU.unsafeTake (checkCR bs end) bs)
         len' = len + end
         status = THStatus len' lines prepend'
     -- Found a newline at position end.
@@ -222,11 +223,7 @@
                              await >>= maybe close (push status)
       where
         start = end + 1 -- start of next chunk
-        line
-          -- There were some bytes before the newline, get them
-          | end > 0 = prepend $ SU.unsafeTake (checkCR bs end) bs
-          -- No bytes before the newline
-          | otherwise = prepend S.empty
+        line = SU.unsafeTake (checkCR bs end) bs
 
 {-# INLINE checkCR #-}
 checkCR :: ByteString -> Int -> Int
diff --git a/test/RequestSpec.hs b/test/RequestSpec.hs
--- a/test/RequestSpec.hs
+++ b/test/RequestSpec.hs
@@ -5,12 +5,15 @@
 module RequestSpec (main, spec) where
 
 import Data.Conduit
-import Data.Conduit.List
+import qualified Data.Conduit.Binary as CB
+import Data.Conduit.List (sourceList)
 import Network.Wai.Handler.Warp.Request
 import Network.Wai.Handler.Warp.RequestHeader (parseByteRanges)
 import Network.Wai.Handler.Warp.Types
 import Test.Hspec
+import Test.Hspec.QuickCheck
 import qualified Data.ByteString.Char8 as S8
+import qualified Data.ByteString.Lazy as L
 import qualified Network.HTTP.Types.Header as HH
 
 deriving instance Show HH.ByteRange
@@ -30,6 +33,30 @@
         tooMany `shouldThrow` overLargeHeader
     it "throws OverLargeHeader when too large" $
         tooLarge `shouldThrow` overLargeHeader
+    it "known bad chunking behavior #239" $ do
+        let chunks =
+                [ "GET / HTTP/1.1\r\nConnection: Close\r"
+                , "\n\r\n"
+                ]
+        (mleftover, actual) <- mapM_ yield chunks $$ headerLines
+        mleftover `shouldBe` Nothing
+        actual `shouldBe` ["GET / HTTP/1.1", "Connection: Close"]
+    prop "random chunking" $ \breaks extraS -> do
+        let bsFull = "GET / HTTP/1.1\r\nConnection: Close\r\n\r\n" `S8.append` extra
+            extra = S8.pack extraS
+            chunks = loop breaks bsFull
+            loop [] bs = [bs, undefined]
+            loop (x:xs) bs =
+                bs1 : loop xs bs2
+              where
+                (bs1, bs2) = S8.splitAt ((x `mod` 10) + 1) bs
+        (leftover, actual) <- mapM_ yield chunks $$ do
+            (_, actual) <- headerLines
+            x' <- CB.take (length extraS)
+            let x = S8.concat $ L.toChunks x'
+            return (x, actual)
+        actual `shouldBe` ["GET / HTTP/1.1", "Connection: Close"]
+        leftover `shouldBe` extra
   describe "parseByteRanges" $ do
     let test x y = it x $ parseByteRanges (S8.pack x) `shouldBe` y
     test "bytes=0-499" $ Just [HH.ByteRangeFromTo 0 499]
diff --git a/warp.cabal b/warp.cabal
--- a/warp.cabal
+++ b/warp.cabal
@@ -1,5 +1,5 @@
 Name:                warp
-Version:             2.1.3.2
+Version:             2.1.3.3
 Synopsis:            A fast, light-weight web server for WAI applications.
 License:             MIT
 License-file:        LICENSE
