diff --git a/Codec/Archive/Tar/Unpack.hs b/Codec/Archive/Tar/Unpack.hs
--- a/Codec/Archive/Tar/Unpack.hs
+++ b/Codec/Archive/Tar/Unpack.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Codec.Archive.Tar
@@ -32,10 +33,12 @@
 import Data.Time.Clock.POSIX
          ( posixSecondsToUTCTime )
 import Control.Exception.Safe as Exception
-         ( catch )
+         ( catch, handle, throw )
+import Control.Monad (when)
 import System.IO.Error
          ( isPermissionError )
 import System.Posix.RawFilePath.Directory hiding (Directory, SymbolicLink)
+import System.Posix.RawFilePath.Directory.Errors
 import qualified System.Posix.IO.ByteString as SPI
 import qualified System.Posix as Posix
 import System.Posix.FD
@@ -132,7 +135,10 @@
           -- hard links link targets are always "absolute" paths in
           -- the context of the tar root
           absTarget = if isHardLink then baseDir </> relLinkTarget else FilePath.Native.takeDirectory absPath </> relLinkTarget
-      in copyFile absTarget absPath Overwrite
+      -- some archives have broken recursive links
+      in handle (\(ex :: HPathIOException) ->
+                 when (not . isSameFile $ ex) $ throw ex)
+           $ copyFile absTarget absPath Overwrite
 
 
 setModTime :: RawFilePath -> EpochTime -> IO ()
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,9 @@
 See also http://pvp.haskell.org/faq
 
+0.6.3.1
+
+  * Fix untar when links point to themselves
+
 0.6.3.0
 
   * Fix unpacking of hard links
diff --git a/tar-bytestring.cabal b/tar-bytestring.cabal
--- a/tar-bytestring.cabal
+++ b/tar-bytestring.cabal
@@ -1,5 +1,5 @@
 name:            tar-bytestring
-version:         0.6.3.0
+version:         0.6.3.1
 license:         BSD3
 license-file:    LICENSE
 author:          Duncan Coutts <duncan@community.haskell.org>
