From 12ad8278e305ad9323d7da1b4e7d97199895204a Mon Sep 17 00:00:00 2001 From: Eliot Jones Date: Mon, 1 Mar 2021 14:18:19 -0400 Subject: [PATCH] don't lose object stream offsets when brute-forcing offsets --- .../CrossReferenceObjectOffsetValidator.cs | 43 ++----------------- 1 file changed, 3 insertions(+), 40 deletions(-) diff --git a/src/UglyToad.PdfPig/Parser/FileStructure/CrossReferenceObjectOffsetValidator.cs b/src/UglyToad.PdfPig/Parser/FileStructure/CrossReferenceObjectOffsetValidator.cs index 85436bc7..63d85dd8 100644 --- a/src/UglyToad.PdfPig/Parser/FileStructure/CrossReferenceObjectOffsetValidator.cs +++ b/src/UglyToad.PdfPig/Parser/FileStructure/CrossReferenceObjectOffsetValidator.cs @@ -29,52 +29,15 @@ var bruteForceOffsets = BruteForceSearcher.GetObjectLocations(bytes); if (bruteForceOffsets.Count > 0) { - var objStreams = new List(); - // find all object streams foreach (var entry in crossReferenceTable.ObjectOffsets) { var offset = entry.Value; if (offset < 0) { - var objStream = new IndirectReference(-offset, 0); - if (!objStreams.Contains(objStream)) - { - objStreams.Add(new IndirectReference(-offset, 0)); - } - } - - // remove all found object streams - if (objStreams.Count > 0) - { - foreach (var key in objStreams) - { - if (bruteForceOffsets.ContainsKey(key)) - { - // remove all parsed objects which are part of an object stream - //ISet objects = xrefTrailerResolver - // .getContainedObjectNumbers((int)(key.Number)); - //foreach (long objNr in objects) - //{ - // CosObjectKey streamObjectKey = new CosObjectKey(objNr, 0); - - // if (bfCOSObjectKeyOffsets.TryGetValue(streamObjectKey, out long streamObjectOffset) && streamObjectOffset > 0) - // { - // bfCOSObjectKeyOffsets.Remove(streamObjectKey); - // } - //} - } - else - { - // remove all objects which are part of an object stream which wasn't found - //ISet objects = xrefTrailerResolver - // .getContainedObjectNumbers((int)(key.Number)); - //foreach (long objNr in objects) - //{ - // xrefOffset.Remove(new CosObjectKey(objNr, 0)); - //} - } - } + // Trust stream offsets for now. + // TODO: more validation of streams. + builderOffsets[entry.Key] = entry.Value; } foreach (var item in bruteForceOffsets)