diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,7 @@
+## 5.2.5.5
+
+* Support GHC 9.4
+
 ## 5.2.5.4
 
 * Add Freebsd Aarch64 support
diff --git a/lzma-static.cabal b/lzma-static.cabal
--- a/lzma-static.cabal
+++ b/lzma-static.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                lzma-static
-version:             5.2.5.4
+version:             5.2.5.5
 
 synopsis:            LZMA/XZ compression and decompression (static)
 homepage:            https://github.com/hasufell/lzma-static
@@ -64,8 +64,8 @@
   exposed-modules:     Codec.Compression.Lzma
   other-modules:       LibLzma
 
-  build-depends:       base       >=4.5    && <4.15
-                     , bytestring >=0.9.2  && <0.11
+  build-depends:       base       >=4.5    && <5
+                     , bytestring >=0.9.2  && <0.12
 
   if os(windows)
     include-dirs: autoconf-win32
@@ -216,7 +216,7 @@
                      , bytestring
   -- additional dependencies that require version bounds
   build-depends:       HUnit                      >= 1.2      && <1.7
-                     , QuickCheck                 >= 2.8      && <2.14
+                     , QuickCheck                 >= 2.8      && <2.15
                      , tasty                      >= 0.10     && <1.4
                      , tasty-hunit                >= 0.9      && <0.11
                      , tasty-quickcheck           >= 0.8.3.2  && <0.11
diff --git a/src/Codec/Compression/Lzma.hs b/src/Codec/Compression/Lzma.hs
--- a/src/Codec/Compression/Lzma.hs
+++ b/src/Codec/Compression/Lzma.hs
@@ -88,11 +88,11 @@
       where
         loop BSL.Empty  (DecompressStreamEnd rest)
           | BS.null rest = return BSL.Empty
-          | otherwise = fail "Codec.Compression.Lzma.decompressWith: trailing data"
+          | otherwise = error "Codec.Compression.Lzma.decompressWith: trailing data"
         loop (BSL.Chunk _ _) (DecompressStreamEnd _) =
-            fail "Codec.Compression.Lzma.decompressWith: trailing data"
+            error "Codec.Compression.Lzma.decompressWith: trailing data"
         loop _ (DecompressStreamError e) =
-            fail ("Codec.Compression.Lzma.decompressWith: decoding error " ++ show e)
+            error ("Codec.Compression.Lzma.decompressWith: decoding error " ++ show e)
         loop BSL.Empty (DecompressInputRequired supply) =
             loop BSL.Empty =<< supply BS.empty
         loop (BSL.Chunk c bs') (DecompressInputRequired supply) =
@@ -123,7 +123,7 @@
         loop BSL.Empty  CompressStreamEnd =
             return BSL.Empty
         loop (BSL.Chunk _ _) CompressStreamEnd =
-            fail "Codec.Compression.Lzma.compressWith: the impossible happened"
+            error "Codec.Compression.Lzma.compressWith: the impossible happened"
         loop BSL.Empty (CompressInputRequired _ supply) =
             loop BSL.Empty =<< supply BS.empty
         loop (BSL.Chunk c bs') (CompressInputRequired _ supply) =
@@ -222,7 +222,7 @@
                 LzmaRetOK
                   | BS.null obuf -> do
                       unless (used > 0) $
-                          fail "compressST: input chunk not consumed"
+                          error "compressST: input chunk not consumed"
                       withChunk (return inputRequired) goInput chunk'
                   | otherwise    -> return (CompressOutputAvailable obuf
                                             (withChunk (return inputRequired) goInput chunk'))
@@ -235,15 +235,16 @@
 
         -- drain encoder till LzmaRetStreamEnd is reported
         goSync :: LzmaAction -> ST s (CompressStream (ST s)) -> ST s (CompressStream (ST s))
-        goSync LzmaRun _ = fail "compressST: goSync called with invalid argument"
+        goSync LzmaRun _ = error "compressST: goSync called with invalid argument"
         goSync action next = goSync'
           where
             goSync' = do
-                (rc, 0, obuf) <- strictToLazyST (noDuplicateST >>
+                (rc, n, obuf) <- strictToLazyST (noDuplicateST >>
                                                  runLzmaStream ls BS.empty action bUFSIZ)
+                when (n /= 0) $ error "compressST: n was not zero"
                 case rc of
                     LzmaRetOK
-                        | BS.null obuf -> fail ("compressIO: empty output chunk during " ++ show action)
+                        | BS.null obuf -> error ("compressIO: empty output chunk during " ++ show action)
                         | otherwise    -> return (CompressOutputAvailable obuf goSync')
                     LzmaRetStreamEnd
                         | BS.null obuf -> next
@@ -348,7 +349,7 @@
                 LzmaRetOK
                   | BS.null obuf -> do
                       unless (used > 0) $
-                          fail "decompressST: input chunk not consumed"
+                          error "decompressST: input chunk not consumed"
                       withChunk (return inputRequired) goInput chunk'
                   | otherwise    -> return (DecompressOutputAvailable obuf
                                             (withChunk goDrain goInput chunk'))
@@ -369,8 +370,9 @@
         goSync action next = goSync'
           where
             goSync' = do
-                (rc, 0, obuf) <- strictToLazyST (noDuplicateST >>
+                (rc, n, obuf) <- strictToLazyST (noDuplicateST >>
                                                  runLzmaStream ls BS.empty action bUFSIZ)
+                when (n /= 0) $ error "decompressST: n was not zero"
                 case rc of
                   LzmaRetOK
                     | BS.null obuf -> next
