Fix precision bug caused by using Floats to represent PDF Number values sometimes used to represent a byte offset within a file

This commit is contained in:
Tissevert 2019-09-22 01:34:17 +02:00
parent 9ab010de61
commit 29c5823f34
2 changed files with 4 additions and 3 deletions

View File

@ -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

View File

@ -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 $