diff options
Diffstat (limited to 'Master/tlpkg/tlgs/Resource/Init/pdf_base.ps')
-rw-r--r-- | Master/tlpkg/tlgs/Resource/Init/pdf_base.ps | 60 |
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. |