on master help sign in
Merge
be09b9fBryan O'Sullivan
Data/Aeson/Parser/Internal.hs+11−6
@@ -37,7 +37,7 @@ import Data.ByteString as B
37import Data.Char (chr)
37import Data.Char (chr)
38import Data.Monoid (mappend, mempty)
38import Data.Monoid (mappend, mempty)
39import Data.Text as T
39import Data.Text as T
40−import Data.Text.Encoding (decodeUtf8)
40+import Data.Text.Encoding (decodeUtf8')
41import Data.Vector as Vector hiding ((++))
41import Data.Vector as Vector hiding ((++))
42import Data.Word (Word8)
42import Data.Word (Word8)
43import qualified Data.Attoparsec as A
43import qualified Data.Attoparsec as A
@@ -175,11 +175,16 @@ jstring_ = {-# SCC "jstring_" #-} do
175 then Nothing
175 then Nothing
176 else Just (c == backslash)
176 else Just (c == backslash)
177 _ <- A.word8 doubleQuote
177 _ <- A.word8 doubleQuote
178− if backslash `B.elem` s
178+ s' <- if backslash `B.elem` s
179− then case Z.parse unescape s of
179+ then case Z.parse unescape s of
180− Right r -> return (decodeUtf8 r)
180+ Right r -> return r
181− Left err -> fail err
181+ Left err -> fail err
182− else return (decodeUtf8 s)
182+ else return s
183+
184+ case decodeUtf8' s' of
185+ Right r -> return r
186+ Left err -> fail $ show err
187+
183{-# INLINE jstring_ #-}
188{-# INLINE jstring_ #-}
184
189
185unescape :: Z.Parser ByteString
190unescape :: Z.Parser ByteString