Skip to content

Commit 3b507bd

Browse files
committed
Wrap recv call in try to prevent crash on malformed input
1 parent ef4af87 commit 3b507bd

1 file changed

Lines changed: 14 additions & 6 deletions

File tree

src/src/Lib.hs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module Lib
44

55
import Control.Concurrent (forkFinally)
66
import qualified Control.Exception as E
7+
import Control.Exception (SomeException, try)
78
import Control.Monad (unless, forever, void)
89
import qualified Data.ByteString as S
910
import qualified Data.ByteString.Char8 as S8
@@ -14,7 +15,6 @@ import qualified Network.DNS.IO as DNS.IO
1415
import qualified Network.DNS.Types as DNS
1516
import Network.DNS.Types (DNSMessage)
1617
import qualified Network.DNS.Encode as DNS.Encode
17-
import qualified Network.DNS.Decode as DNS.Decode
1818
import Data.IP.Internal
1919
import qualified SlackHook as Slack
2020
import Control.Concurrent.Async (concurrently)
@@ -71,10 +71,14 @@ runTCPServer args model = withSocketsDo $ do
7171

7272
runTCPServerClientThread :: Args -> Model -> Socket -> SockAddr -> IO ()
7373
runTCPServerClientThread args model sock clientAddr = forever $ do
74-
msg <- DNS.IO.receiveVC sock
75-
msgHandler sock msg clientAddr
74+
try_msg <- try (DNS.IO.receiveVC sock) :: IO (Either SomeException DNSMessage)
75+
case try_msg of
76+
Left ex ->
77+
putStrLn $ "Caught exception: " ++ show ex
78+
Right msg ->
79+
msgHandler sock msg clientAddr
7680
where
77-
msgHandler s msg client = do
81+
msgHandler s msg client = do
7882
putStrLn $ show msg
7983
mapM_
8084
(\q -> do
@@ -106,8 +110,12 @@ runUDPServer args model = withSocketsDo $ do
106110
bind sock $ addrAddress addr
107111
return sock
108112
loop sock = forever $ do
109-
(msg, peer) <- DNS.IO.receiveFrom sock
110-
msgHandler sock msg peer
113+
try_msg <- try (DNS.IO.receiveFrom sock) :: IO (Either SomeException (DNSMessage, SockAddr))
114+
case try_msg of
115+
Left ex ->
116+
putStrLn $ "Caught exception: " ++ show ex
117+
Right (msg, peer) ->
118+
msgHandler sock msg peer
111119
msgHandler s msg client = do
112120
putStrLn $ show msg
113121
mapM_

0 commit comments

Comments
 (0)