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 +1/−1
- http-conduit.cabal +1/−1
- test/main.hs +22/−2
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")]