diff --git a/ChangeLog.md b/ChangeLog.md index 877f2c3..e328c56 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,3 +1,5 @@ # Changelog for gemcap ## Unreleased changes + +- fixed a bug that would cause the server to crash when the client aborted the handshake by rejecting the key diff --git a/src/Network/Gemini/Capsule.hs b/src/Network/Gemini/Capsule.hs index 8ef2d6c..c01f329 100644 --- a/src/Network/Gemini/Capsule.hs +++ b/src/Network/Gemini/Capsule.hs @@ -31,7 +31,7 @@ module Network.Gemini.Capsule ( ) where import Control.Concurrent (forkIO) -import Control.Exception (IOException, try) +import Control.Exception (SomeException, try) import Control.Exception.Base (bracket, finally) import Control.Monad (void) import qualified Data.Connection as C @@ -72,7 +72,7 @@ listenLoop sock params handler = do certRef <- newIORef Nothing let params' = adjustServerParams certRef params try (accept params' sock) >>= \case - Left (_::IOException) -> return () + Left (_::SomeException) -> return () Right conn -> void $ forkIO $ finally (readIORef certRef >>= runConnection conn handler) (C.close conn)