From 29c5823f34df47db4774ba4dd43eceedf3219a0d Mon Sep 17 00:00:00 2001 From: Tissevert Date: Sun, 22 Sep 2019 01:34:17 +0200 Subject: [PATCH] Fix precision bug caused by using Floats to represent PDF Number values sometimes used to represent a byte offset within a file --- src/PDF/Body.hs | 4 ++-- src/PDF/Object.hs | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/PDF/Body.hs b/src/PDF/Body.hs index 2f07bba..e1e1175 100644 --- a/src/PDF/Body.hs +++ b/src/PDF/Body.hs @@ -57,7 +57,7 @@ lookupOffset objectId = do entryOffset (InUse {offset}) = Just offset entryOffset _ = Nothing -loadNumber :: ObjectId -> SParser Float +loadNumber :: ObjectId -> SParser Double loadNumber objectId = do offset <- getOffset <$> lookupOffset objectId objectStart <- BS.drop offset <$> gets input @@ -70,7 +70,7 @@ loadNumber objectId = do invalidValue :: Object -> String invalidValue v = "Invalid value " ++ show v -getSize :: Maybe DirectObject -> SParser Float +getSize :: Maybe DirectObject -> SParser Double getSize Nothing = fail "Missing '/Length' key on stream" getSize (Just (NumberObject (Number size))) = return size getSize (Just (Reference (IndirectObjCoordinates {objectId}))) = do diff --git a/src/PDF/Object.hs b/src/PDF/Object.hs index caba73b..d6d1129 100644 --- a/src/PDF/Object.hs +++ b/src/PDF/Object.hs @@ -5,6 +5,7 @@ module PDF.Object ( Content(..) , DirectObject(..) , Flow(..) + , IndexedObjects , IndirectObjCoordinates(..) , InputStructure(..) , Name(..) @@ -87,7 +88,7 @@ boolean = -- -- Number -- -newtype Number = Number Float deriving Show +newtype Number = Number Double deriving Show instance Output Number where output (Number f) = Output.string $