packages feed

http-conduit 1.3.0 → 1.3.0.1

raw patch · 3 files changed

+24/−4 lines, 3 files

Files

Network/HTTP/Conduit/Response.hs view
@@ -113,7 +113,7 @@                   => Int                   -> C.Sink S8.ByteString m a                   -> C.Sink S8.ByteString m a-checkHeaderLength len _+checkHeaderLength len C.Processing{}     | len <= 0 = C.SinkM $ liftIO $ throwIO OverlongHeaders checkHeaderLength len (C.Processing pushI closeI) = C.Processing     (\bs -> checkHeaderLength
http-conduit.cabal view
@@ -1,5 +1,5 @@ name:            http-conduit-version:         1.3.0+version:         1.3.0.1 license:         BSD3 license-file:    LICENSE author:          Michael Snoyman <michael@snoyman.com>
test/main.hs view
@@ -1,12 +1,13 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} import Test.Hspec.Monadic+import qualified Data.ByteString as S import Test.Hspec.HUnit () import Test.HUnit import Network.Wai import Network.Wai.Handler.Warp (run) import Network.HTTP.Conduit-import Control.Concurrent (forkIO, killThread)+import Control.Concurrent (forkIO, killThread, threadDelay) import Network.HTTP.Types import Control.Exception.Lifted (try, SomeException) import Network.HTTP.Conduit.ConnInfo@@ -16,9 +17,11 @@ import Control.Monad.Trans.Resource (register) import Control.Monad.IO.Class (liftIO) import Data.ByteString.UTF8 (fromString)-import Data.Conduit.List (sourceList)+import Data.Conduit.List (sourceList, sinkNull) import Data.CaseInsensitive (mk) import Data.List (partition)+import qualified Data.Conduit.List as CL+import qualified Data.Conduit.Binary as CB  app :: Application app req =@@ -60,6 +63,7 @@             clearSocketsList             tid1 <- forkIO $ run 3002 app             tid2 <- forkIO $ run 3003 app+            threadDelay 1000             withManager $ \manager -> do                 let Just req1 = parseUrl "http://localhost:3002/"                 let Just req2 = parseUrl "http://localhost:3003/"@@ -73,6 +77,7 @@     describe "DOS protection" $ do         it "overlong headers" $ do             tid1 <- forkIO overLongHeaders+            threadDelay 1000             withManager $ \manager -> do                 _ <- register $ killThread tid1                 let Just req1 = parseUrl "http://localhost:3004/"@@ -80,9 +85,24 @@                 case res1 of                     Left e -> liftIO $ show (e :: SomeException) @?= show OverlongHeaders                     _ -> error "Shouldn't have worked"+        it "not overlong headers" $ do+            tid1 <- forkIO notOverLongHeaders+            threadDelay 1000+            withManager $ \manager -> do+                _ <- register $ killThread tid1+                let Just req1 = parseUrl "http://localhost:3005/"+                _ <- httpLbs req1 manager+                return ()  overLongHeaders :: IO () overLongHeaders = runTCPServer (ServerSettings 3004 HostAny) $ \_ sink ->     src $$ sink   where     src = sourceList $ "HTTP/1.0 200 OK\r\nfoo: " : repeat "bar"++notOverLongHeaders :: IO ()+notOverLongHeaders = runTCPServer (ServerSettings 3005 HostAny) $ \src' sink -> do+    src' $$ CL.drop 1+    src $$ sink+  where+    src = sourceList $ [S.concat $ "HTTP/1.0 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 16384\r\n\r\n" : ( take 16384 $ repeat "x")]