@@ -39,7 +39,7 @@ import Prelude.Compat
39import Control.Applicative ((<|>))
39import Control.Applicative ((<|>))
40import Control.Monad (void, when)
40import Control.Monad (void, when)
41import Data.Aeson.Types.Internal (IResult(..), JSONPath, Result(..), Value(..))
41import Data.Aeson.Types.Internal (IResult(..), JSONPath, Result(..), Value(..))
42−import Data.Attoparsec.ByteString.Char8 (Parser, char, decimal, endOfInput, isDigit_w8, signed, skipSpace, string)
42+import Data.Attoparsec.ByteString.Char8 (Parser, char, decimal, endOfInput, isDigit_w8, signed, string)
43import Data.Scientific (Scientific)
43import Data.Scientific (Scientific)
44import Data.Text (Text)
44import Data.Text (Text)
45import Data.Vector as Vector (Vector, empty, fromListN, reverse)
45import Data.Vector as Vector (Vector, empty, fromListN, reverse)
@@ -295,6 +295,12 @@ jsonEOF = json <* skipSpace <* endOfInput
295jsonEOF' :: Parser Value
295jsonEOF' :: Parser Value
296jsonEOF' = json' <* skipSpace <* endOfInput
296jsonEOF' = json' <* skipSpace <* endOfInput
298+-- | The only valid whitespace in a JSON document is space, newline,
299+-- carriage return, and tab.
300+skipSpace :: Parser ()
301+skipSpace = A.skipWhile $ \w -> w == 0x20 || w == 0x0a || w == 0x0d || w == 0x09
302+{-# INLINE skipSpace #-}
298------------------ Copy-pasted and adapted from attoparsec ------------------
304------------------ Copy-pasted and adapted from attoparsec ------------------
300-- A strict pair
306-- A strict pair