diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,11 @@
 
+50200.1.1
+=========
+
+Bug fixes:
+ * The file browser now deals gracefully with directories containing
+   broken symlinks.
+
 50200.1.0
 =========
 
diff --git a/matterhorn.cabal b/matterhorn.cabal
--- a/matterhorn.cabal
+++ b/matterhorn.cabal
@@ -1,5 +1,5 @@
 name:                matterhorn
-version:             50200.1.0
+version:             50200.1.1
 synopsis:            Terminal client for the Mattermost chat system
 description:         This is a terminal client for the Mattermost chat
                      system. Please see the README for a list of
@@ -134,7 +134,7 @@
                      , config-ini           >= 0.2.2.0 && < 0.3
                      , process              >= 1.4    && < 1.7
                      , microlens-platform   >= 0.3    && < 0.4
-                     , brick                >= 0.42.1 && < 0.43
+                     , brick                >= 0.43   && < 0.44
                      , brick-skylighting    >= 0.2    && < 0.4
                      , vty                  >= 5.23.1 && < 5.26
                      , word-wrap            >= 0.4.0  && < 0.5
@@ -183,7 +183,7 @@
   hs-source-dirs:     src, test
   build-depends:      base                 >=4.7     && <5
                     , base-compat          >= 0.9    && < 0.11
-                    , brick                >= 0.42.1 && < 0.43
+                    , brick                >= 0.43   && < 0.44
                     , bytestring           >= 0.10   && < 0.11
                     , cheapskate           >= 0.1    && < 0.2
                     , checkers             >= 0.4    && < 0.5
diff --git a/src/Events/ManageAttachments.hs b/src/Events/ManageAttachments.hs
--- a/src/Events/ManageAttachments.hs
+++ b/src/Events/ManageAttachments.hs
@@ -14,6 +14,7 @@
 import qualified Brick.Widgets.FileBrowser as FB
 import qualified Brick.Widgets.List as L
 import qualified Data.ByteString as BS
+import qualified Data.Text as T
 import qualified Data.Vector as Vector
 import qualified Graphics.Vty as V
 import           Lens.Micro.Platform ( (%=), to )
@@ -82,6 +83,12 @@
         True ->
             handleFileBrowserEvent e
 
+    b' <- use (csEditState.cedFileBrowser)
+    case FB.fileBrowserException b' of
+        Nothing -> return ()
+        Just ex -> do
+            mhLog LogError $ T.pack $ "FileBrowser exception: " <> show ex
+
 cancelAttachmentBrowse :: MH ()
 cancelAttachmentBrowse = do
     es <- use (csEditState.cedAttachmentList.L.listElementsL)
@@ -93,35 +100,35 @@
 handleFileBrowserEvent e = do
     mhHandleEventLensed (csEditState.cedFileBrowser) FB.handleFileBrowserEvent e
     b <- use (csEditState.cedFileBrowser)
+
     -- TODO: Check file browser exception state
-    case FB.fileBrowserSelection b of
-        Nothing -> return ()
-        Just entry -> do
-            -- Is the entry already present? If so, ignore the selection.
-            es <- use (csEditState.cedAttachmentList.L.listElementsL)
-            let matches = (== (FB.fileInfoFilePath entry)) .
-                          FB.fileInfoFilePath .
-                          attachmentDataFileInfo
-            case Vector.find matches es of
-                Just _ -> return ()
-                Nothing -> do
-                    let path = FB.fileInfoFilePath entry
-                    readResult <- liftIO $ E.try $ BS.readFile path
-                    setMode ManageAttachments
-                    case readResult of
-                        Left (_::E.SomeException) ->
-                            -- TODO: report the error
-                            return ()
-                        Right bytes -> do
-                            let a = AttachmentData { attachmentDataFileInfo = entry
-                                                   , attachmentDataBytes = bytes
-                                                   }
-                            oldIdx <- use (csEditState.cedAttachmentList.L.listSelectedL)
-                            let newIdx = if Vector.null es
-                                         then Just 0
-                                         else oldIdx
-                            csEditState.cedAttachmentList %= L.listReplace (Vector.snoc es a) newIdx
-                            setMode Main
+    let entries = FB.fileBrowserSelection b
+    forM_ entries $ \entry -> do
+        -- Is the entry already present? If so, ignore the selection.
+        es <- use (csEditState.cedAttachmentList.L.listElementsL)
+        let matches = (== (FB.fileInfoFilePath entry)) .
+                      FB.fileInfoFilePath .
+                      attachmentDataFileInfo
+        case Vector.find matches es of
+            Just _ -> return ()
+            Nothing -> do
+                let path = FB.fileInfoFilePath entry
+                readResult <- liftIO $ E.try $ BS.readFile path
+                case readResult of
+                    Left (_::E.SomeException) ->
+                        -- TODO: report the error
+                        return ()
+                    Right bytes -> do
+                        let a = AttachmentData { attachmentDataFileInfo = entry
+                                               , attachmentDataBytes = bytes
+                                               }
+                        oldIdx <- use (csEditState.cedAttachmentList.L.listSelectedL)
+                        let newIdx = if Vector.null es
+                                     then Just 0
+                                     else oldIdx
+                        csEditState.cedAttachmentList %= L.listReplace (Vector.snoc es a) newIdx
+
+    when (not $ null entries) $ setMode Main
 
 deleteSelectedAttachment :: MH ()
 deleteSelectedAttachment = do
diff --git a/src/Types.hs b/src/Types.hs
--- a/src/Types.hs
+++ b/src/Types.hs
@@ -867,7 +867,7 @@
     AttachmentData { attachmentDataFileInfo :: FB.FileInfo
                    , attachmentDataBytes :: BS.ByteString
                    }
-                   deriving (Eq, Show, Read)
+                   deriving (Eq, Show)
 
 -- | The input mode.
 data EditMode =
