diff --git a/Text/Regex/PCRE.hs b/Text/Regex/PCRE.hs
--- a/Text/Regex/PCRE.hs
+++ b/Text/Regex/PCRE.hs
@@ -65,6 +65,6 @@
 
 getVersion_Text_Regex_PCRE :: Version
 getVersion_Text_Regex_PCRE =
-  Version { versionBranch = [0,91]
+  Version { versionBranch = [0,92]
           , versionTags = ["unstable"]
           }
diff --git a/Text/Regex/PCRE/ByteString.hs b/Text/Regex/PCRE/ByteString.hs
--- a/Text/Regex/PCRE/ByteString.hs
+++ b/Text/Regex/PCRE/ByteString.hs
@@ -48,7 +48,7 @@
 import Text.Regex.PCRE.Wrap -- all
 import Data.Array(Array,listArray)
 import Data.ByteString(ByteString)
-import qualified Data.ByteString as B(empty,useAsCString,last,take,drop)
+import qualified Data.ByteString as B(empty,useAsCString,last,take,drop,null)
 import qualified Data.ByteString.Base as B(unsafeUseAsCString,unsafeUseAsCStringLen)
 import System.IO.Unsafe(unsafePerformIO)
 import Text.Regex.Base.RegexLike(RegexContext(..),RegexMaker(..),RegexLike(..),MatchOffset,MatchLength)
@@ -90,9 +90,10 @@
         -> ByteString  -- ^ The regular expression to compile
         -> IO (Either (MatchOffset,String) Regex) -- ^ Returns: the compiled regular expression
 compile c e pattern = do
-  let asCString = if (0==B.last pattern)
-                    then B.unsafeUseAsCString
-                    else B.useAsCString
+  -- PCRE does not allow one to specify a length for the regular expression, it must by 0 terminated
+  let asCString bs = if (not (B.null bs)) && (0==B.last bs)
+                       then B.unsafeUseAsCString bs
+                       else B.useAsCString bs
   asCString pattern (wrapCompile c e)
 
 -- ---------------------------------------------------------------------
diff --git a/Text/Regex/PCRE/ByteString/Lazy.hs b/Text/Regex/PCRE/ByteString/Lazy.hs
--- a/Text/Regex/PCRE/ByteString/Lazy.hs
+++ b/Text/Regex/PCRE/ByteString/Lazy.hs
@@ -47,7 +47,7 @@
 
 import Text.Regex.PCRE.Wrap -- all
 import Data.Array(Array)
-import qualified Data.ByteString.Lazy as L(ByteString,toChunks,fromChunks,last,snoc)
+import qualified Data.ByteString.Lazy as L(ByteString,toChunks,fromChunks,last,null,snoc)
 import qualified Data.ByteString as B(ByteString,concat)
 import qualified Data.ByteString.Base as B(unsafeUseAsCString,unsafeUseAsCStringLen)
 import System.IO.Unsafe(unsafePerformIO)
@@ -74,7 +74,7 @@
 
 {-# INLINE asCString #-}
 asCString :: L.ByteString -> (CString -> IO a) -> IO a
-asCString s = if (0==L.last s)
+asCString s = if (not (L.null s)) && (0==L.last s)
                 then B.unsafeUseAsCString (fromLazy s)
                 else B.unsafeUseAsCString (fromLazy (L.snoc s 0))
 
diff --git a/regex-pcre.cabal b/regex-pcre.cabal
--- a/regex-pcre.cabal
+++ b/regex-pcre.cabal
@@ -1,5 +1,5 @@
 Name:                   regex-pcre
-Version:                0.91
+Version:                0.92
 -- Cabal-Version:       >=1.1.4
 License:                BSD3
 License-File:           LICENSE
