diff --git a/Data/Streaming/Filesystem.hs b/Data/Streaming/Filesystem.hs
--- a/Data/Streaming/Filesystem.hs
+++ b/Data/Streaming/Filesystem.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 -- | Streaming functions for interacting with the filesystem.
 module Data.Streaming.Filesystem
     ( DirStream
@@ -60,6 +61,7 @@
 import System.Posix.Directory (DirStream, openDirStream, closeDirStream)
 import qualified System.Posix.Directory as Posix
 import qualified System.Posix.Files as PosixF
+import Control.Exception (try, IOException)
 
 readDirStream :: DirStream -> IO (Maybe FilePath)
 readDirStream ds = do
@@ -78,9 +80,10 @@
             | PosixF.isRegularFile s -> return FTFile
             | PosixF.isDirectory s -> return FTDirectory
             | PosixF.isSymbolicLink s -> do
-                s' <- PosixF.getFileStatus fp
-                case () of
-                    ()
+                es' <- try $ PosixF.getFileStatus fp
+                case es' of
+                    Left (_ :: IOException) -> return FTOther
+                    Right s'
                         | PosixF.isRegularFile s' -> return FTFileSym
                         | PosixF.isDirectory s' -> return FTDirectorySym
                         | otherwise -> return FTOther
diff --git a/streaming-commons.cabal b/streaming-commons.cabal
--- a/streaming-commons.cabal
+++ b/streaming-commons.cabal
@@ -1,5 +1,5 @@
 name:                streaming-commons
-version:             0.1.2
+version:             0.1.2.1
 synopsis:            Common lower-level functions needed by various streaming data libraries
 description:         Provides low-dependency functionality commonly needed by various streaming data libraries, such as conduit and pipes.
 homepage:            https://github.com/fpco/streaming-commons
diff --git a/test/Data/Streaming/FilesystemSpec.hs b/test/Data/Streaming/FilesystemSpec.hs
--- a/test/Data/Streaming/FilesystemSpec.hs
+++ b/test/Data/Streaming/FilesystemSpec.hs
@@ -43,6 +43,18 @@
             ft <- getFileType "tmp"
             _ <- tryIO $ removeLink "tmp"
             ft `shouldBe` FTOther
+        it "recursive symlink is other" $ do
+            _ <- tryIO $ removeLink "tmp"
+            createSymbolicLink "tmp" "tmp"
+            ft <- getFileType "tmp"
+            _ <- tryIO $ removeLink "tmp"
+            ft `shouldBe` FTOther
+        it "dangling symlink is other" $ do
+            _ <- tryIO $ removeLink "tmp"
+            createSymbolicLink "doesnotexist" "tmp"
+            ft <- getFileType "tmp"
+            _ <- tryIO $ removeLink "tmp"
+            ft `shouldBe` FTOther
 
 tryIO :: IO a -> IO (Either IOException a)
 tryIO = try
