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:
parent
9ab010de61
commit
29c5823f34
|
@ -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
|
||||
|
|
|
@ -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 $
|
||||
|
|
Loading…
Reference in New Issue