summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlgs/Resource/Init/pdf_base.ps')
-rw-r--r--Master/tlpkg/tlgs/Resource/Init/pdf_base.ps60
1 files changed, 21 insertions, 39 deletions
diff --git a/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps b/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps
index 2453b6bc1d3..1e7bd701bbc 100644
--- a/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps
+++ b/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2021 Artifex Software, Inc.
+% Copyright (C) 2001-2020 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
@@ -779,19 +779,17 @@ currentdict /token_nofail_dict .undef
% Read the data for all objects. We check to see if we get
% the number of objects that we expect.
% Stack: strm# objstreamdict N objectstream [obj#] PDFDEBUG
- /ResolveObjectStreamMark 3 -1 roll
+ mark 3 -1 roll % Get objectstream
count 4 index add % Determine stack depth with objects
3 1 roll
resolveobjstreamopdict .pdfrun % Get PDF objects
- count /ResolveObjectStreamMark CountToKey not {0} if
- 1 add index
- ne
+ count counttomark 1 add index ne
{
- count /ResolveObjectStreamMark CountToKey not {0} if
- 1 add index gt {
+ count counttomark 1 add index gt {
( **** Error: Incorrect object count in object stream (too many objects).\n) pdfformaterror
( Output may be incorrect.\n) pdfformaterror
} if
+
% Its possible for us to end up here with a valid file. The way we work is to read the
% stream and tokenise all the objects, but that assumes there will be delimiters or
% whitespace between each object in the stream. We can easily think of cases where
@@ -823,13 +821,13 @@ currentdict /token_nofail_dict .undef
% the stack, in the right order, preceded by a mark, a count, and an array containing
% all the object numbers.
- % First, discard everything we read up to now; we can reuse the 'mark' which was placed
- % by the preceding code to do this, as long as we remember to replace that 'mark'.
+ % First, discard everything we read up to now; we can reuse the mark which was placed
+ % by the preceding code to do this, as long as we remember to replace that mark.
% Handily this will leave the count and the array which contains the object numbers in place.
- /ResolveObjectStreamMark ClearToKey
+ cleartomark
- % Replace the 'mark' consumed by conttomark above, so that we match what the code following this error handling expects.
- /ResolveObjectStreamMark
+ % Replace the mark consumed by conttomark above, so that we match what the code following this error handling expects.
+ mark
% copy the ObjStm dictionary and then copy the count of objects expected
4 index 4 index
@@ -896,15 +894,14 @@ currentdict /token_nofail_dict .undef
% but leave count of objects. Check that aginst the number of objects
% retrieved. If we got too few then issue a warning.
- pop pop exch pop /ResolveObjectStreamMark CountToKey not {1} if
- 1 sub lt {
+ pop pop exch pop counttomark 1 sub lt {
( **** Error: Incorrect object count in object stream (too few objects).\n) pdfformaterror
( Output may be incorrect.\n) pdfformaterror
} if
} if
% We have the object data
- /ResolveObjectStreamMark CountToKey not {0} if array astore
+ counttomark array astore % Put objects into an array
exch pop exch pop % Remove mark and count
currentdict //no_debug_dict eq { end } if % Restore debug context
% Save the objects into Objects
@@ -1093,30 +1090,15 @@ currentdict /no_debug_dict undef
% Some (bad) PDf files have invalid stream lengths. This causes problems
% if we reposition beyond the end of the file. So we compare the given
% length to number of bytes left in the file.
- dup mark exch /Length {knownoget} stopped {
- % Bug 703372 is a PDF file where the XRef stream dictionary has a Length which is an
- % indirect object. Clearly we cannot look that up in an xref which we haevn't yet
- % read! We catch the error from knownoget and do not reposition the steam. After
- % that the normal recovery code kicks in and we will eventually manage to read
- % the compressed xref.
- cleartomark
- }
- {
- {
- dup type /realtype eq {
- ( **** Warning: stream length is a real number; converting to integer.\n) pdfformatwarning
- cvi 2 copy /Length exch put
- } if
- dup PDFfile bytesavailable lt { % compare to to bytes left in file
- PDFfile fileposition % reposition to the end of stream
- add PDFfile exch setfileposition
- } {
- pop % bad stream length - do not reposition.
- % This will force a length warning below
- } ifelse
- } if
- pop % the mark from the Length dereference guard above.
- } ifelse
+ dup /Length knownoget {
+ dup PDFfile bytesavailable lt { % compare to to bytes left in file
+ PDFfile fileposition % reposition to the end of stream
+ add PDFfile exch setfileposition
+ } {
+ pop % bad stream length - do not reposition.
+ % This will force a length warning below
+ } ifelse
+ } if
} {
pop
% We're already reading from a stream, which we can't reposition.