texlive[49215] Master: Upgrade gs-9.25 -> gs-9.26

commits+reinhardk at tug.org commits+reinhardk at tug.org
Wed Nov 21 23:02:45 CET 2018


Revision: 49215
          http://tug.org/svn/texlive?view=revision&revision=49215
Author:   reinhardk
Date:     2018-11-21 23:02:45 +0100 (Wed, 21 Nov 2018)
Log Message:
-----------
Upgrade gs-9.25 -> gs-9.26

Modified Paths:
--------------
    trunk/Master/tlpkg/tlgs/README.TEXLIVE
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_cff.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidcm.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_ciddc.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_cmap.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_diskn.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps1.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_epsf.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_fapi.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_fntem.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_fonts.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_init.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_lev2.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_ll3.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_res.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_resmp.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_setpd.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_statd.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ32.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_type1.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/pdf_font.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/pdf_ops.ps
    trunk/Master/tlpkg/tlgs/bin/gsdll32.dll
    trunk/Master/tlpkg/tlgs/bin/gsdll32.lib
    trunk/Master/tlpkg/tlgs/bin/gswin32.exe
    trunk/Master/tlpkg/tlgs/bin/gswin32c.exe

Added Paths:
-----------
    trunk/Master/source/ghostscript-9.26.tar.xz

Removed Paths:
-------------
    trunk/Master/source/ghostscript-9.25.tar.xz

Deleted: trunk/Master/source/ghostscript-9.25.tar.xz
===================================================================
(Binary files differ)

Added: trunk/Master/source/ghostscript-9.26.tar.xz
===================================================================
(Binary files differ)

Index: trunk/Master/source/ghostscript-9.26.tar.xz
===================================================================
--- trunk/Master/source/ghostscript-9.26.tar.xz	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/source/ghostscript-9.26.tar.xz	2018-11-21 22:02:45 UTC (rev 49215)

Property changes on: trunk/Master/source/ghostscript-9.26.tar.xz
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/x-xz
\ No newline at end of property
Modified: trunk/Master/tlpkg/tlgs/README.TEXLIVE
===================================================================
--- trunk/Master/tlpkg/tlgs/README.TEXLIVE	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/README.TEXLIVE	2018-11-21 22:02:45 UTC (rev 49215)
@@ -1,5 +1,5 @@
 
-This directory contains a subset of the Ghostscript 9.25 distribution
+This directory contains a subset of the Ghostscript 9.26 distribution
 for Windows.  The only purpose of this package is to support programs
 shipped with TeX Live.  It's not intended for general use. 
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_cff.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_cff.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_cff.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -199,7 +199,7 @@
 % ordinary CFF font.
 /StartData {          % <resname> <nbytes> StartData -
   currentfile exch subfilefilter //false //false ReadData pop
-} bind def
+} bind executeonly def
 /ReadData {           % <resname> <file> <forceresname> <forcecid> ReadData <fontset>
         % Initialize.
 
@@ -234,7 +234,7 @@
   end		% FontSetInit ProcSet
   /FontSet defineresource
 
-} bind def
+} bind executeonly def
 
 % ---------------- Resource category definition ---------------- %
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidcm.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidcm.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidcm.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -327,7 +327,7 @@
       //FindResource exec
     } ifelse
   } ifelse
-} bind def
+} bind executeonly def
 
 /ResourceStatus {  % <InstName> ResourceStatus <nStatus> <nSize> true
                    % <InstName> ResourceStatus false
@@ -359,7 +359,7 @@
       //false
     } ifelse
   } ifelse
-} bind def
+} bind executeonly def
 
 /ResourceForAll { % <template> <proc> <scratch> ResourceForAll -
 
@@ -440,7 +440,7 @@
 
   % Make the enumerator and apply it :
   /MappedCategoryRedefiner /ProcSet findresource /MakeResourceEnumerator get exec exec
-} bind def
+} bind executeonly def
 
 currentdict end /Font exch /Category defineresource pop
 end

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_ciddc.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_ciddc.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_ciddc.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -204,7 +204,7 @@
     exch pop begin                                   %
     .GetCIDDecoding
     end
-  } bind def
+  } bind executeonly def
 
   /FindResource      % <name> FindResource <dict>
   { currentglobal exch                               % bGlobal /InstName
@@ -212,7 +212,7 @@
     dup //.MakeInstance exec                         % bGlobal /InstName <Inst>
     DefineResource                                   % bGlobal <Inst>
     exch setglobal                                   % <Inst>
-  } bind def
+  } bind executeonly def
 
 currentdict end
 /CIDDecoding exch /Category defineresource pop

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_cmap.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_cmap.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_cmap.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -536,7 +536,7 @@
   } if
   dup /CodeMap .knownget { //null eq { .buildcmap } if } if
   /Generic /Category findresource /DefineResource get exec
-} bind put
+} bind executeonly put
 /Category defineresource pop
         % We might have loaded CID font support already.
 /CIDInit /ProcSet 2 copy { findresource } .internalstopped

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_diskn.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_diskn.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_diskn.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -53,7 +53,7 @@
     exch .setglobal
   }
   if
-} .bind executeonly def % must be bound and hidden for .forceput
+} .bind executeonly odef % must be bound and hidden for .forceput
 
 % Modify .putdevparams to force regeneration of .searchabledevs list
 /.putdevparams {
@@ -61,7 +61,7 @@
   % doesn't get run enough to justify the complication
   //.putdevparams
   //systemdict /.searchabledevs .forceundef
-} .bind odef % must be bound and hidden for .forceundef
+} .bind executeonly odef % must be bound and hidden for .forceundef
 
 % ------ extend filenameforall to handle wildcards in %dev% part of pattern -------%
 /filenameforall {

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -70,7 +70,7 @@
                 % Save a copy of the initial gstate.
   //systemdict /savedinitialgstate gstate readonly .forceput
   .setglobal
-} .bind executeonly def % must be bound and hidden for .forceput
+} .bind executeonly odef % must be bound and hidden for .forceput
 
 % Initialize local dictionaries and gstate when creating a new context.
 % Note that until this completes, we are in the anomalous situation of
@@ -124,7 +124,7 @@
   /savedinitialgstate .systemvar setgstate gsave
                 % Wrap up.
   end .setglobal
-} odef
+} bind executeonly odef
 
 % Check whether an object is a procedure.
 /.proccheck {			% <obj> .proccheck <bool>

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps1.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps1.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps1.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -21,7 +21,7 @@
 % ------ Virtual memory ------ %
 
 /currentshared /.currentglobal load def
-/scheck /.gcheck load def
+/scheck {.gcheck} bind odef
 %****** FOLLOWING IS WRONG ******
 /shareddict currentdict /globaldict .knownget not { 20 dict } if def
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_epsf.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_epsf.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_epsf.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -31,7 +31,7 @@
 /EPSBoundingBoxState 5 def
 /EPSBoundingBoxSetState {
   //systemdict /EPSBoundingBoxState 3 -1 roll .forceput
-} .bind odef % .forceput must be bound and hidden
+} .bind executeonly odef % .forceput must be bound and hidden
 
 % Parse 4 numbers for a bounding box
 /EPSBoundingBoxParse { % (llx lly urx ury) -- llx lly urx ury true OR false

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_fapi.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_fapi.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_fapi.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -455,6 +455,9 @@
 end % the temporary dictionary for local binding.
 odef odef odef odef odef odef
 
+% Undef these, not needed outside this file
+[ /.FAPIavailable /.FAPIpassfont /.FAPIrebuildfont ] {systemdict exch .forceundef} forall
+
 .setlanguagelevel
 
 %END FAPI

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_fntem.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_fntem.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_fntem.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -408,7 +408,7 @@
     exit
   } loop
   exch setglobal
-} .bind executeonly def % must be bound and hidden for .forceput
+} .bind executeonly odef % must be bound and hidden for .forceput
 
 currentdict end /ProcSet defineresource pop
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_fonts.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_fonts.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_fonts.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -372,8 +372,12 @@
 % of strings: what the system thinks is the ps name,
 % and the access path.
 /.setnativefontmapbuilt { % set whether we've been run
-  systemdict exch /.nativefontmapbuilt exch .forceput
-} .bind executeonly def
+  dup type /booleantype eq {
+      systemdict exch /.nativefontmapbuilt exch .forceput
+  }
+  {pop}
+  ifelse
+} .bind executeonly odef
 systemdict /NONATIVEFONTMAP known .setnativefontmapbuilt
 /.buildnativefontmap {   % - .buildnativefontmap <bool>
   systemdict /.nativefontmapbuilt .knownget not
@@ -418,6 +422,7 @@
     //true .setnativefontmapbuilt
   } ifelse
 } bind def
+currentdict /.setnativefontmapbuilt .forceundef
 
 % Create the dictionary that registers the .buildfont procedure
 % (called by definefont) for each FontType.
@@ -578,7 +583,7 @@
 } bind def
 /.setloadingfont {
    //systemdict /.loadingfont 3 -1 roll .forceput
-} .bind odef % .forceput must be bound and hidden
+} .bind executeonly odef % .forceput must be bound and hidden
 /.loadfont
  {              % Some buggy fonts leave extra junk on the stack,
                 % so we have to make a closure that records the stack depth
@@ -1007,7 +1012,7 @@
     dup length string copy
     .forceput setglobal
   } ifelse
-} .bind odef % must be bound and hidden for .forceput
+} .bind executeonly odef % must be bound and hidden for .forceput
 
 % Attempt to load a font from a file.
 /.tryloadfont {         % <fontname> .tryloadfont <font> true
@@ -1098,7 +1103,7 @@
 
                 % Check to make sure the font was actually loaded.
         dup 3 index .fontknownget
-         { dup /PathLoad 4 index //.putgstringcopy exec
+         { dup /PathLoad 4 index .putgstringcopy
            4 1 roll pop pop pop //true exit
          } if
 
@@ -1110,7 +1115,7 @@
          {            % Stack: origfontname fontdirectory path filefontname
            2 index 1 index .fontknownget
             {   % Yes.  Stack: origfontname fontdirectory path filefontname fontdict
-              dup 4 -1 roll /PathLoad exch //.putgstringcopy exec
+              dup 4 -1 roll /PathLoad exch .putgstringcopy
                       % Stack: origfontname fontdirectory filefontname fontdict
               3 -1 roll pop
                       % Stack: origfontname filefontname fontdict
@@ -1143,7 +1148,7 @@
 
     } loop              % end of loop
 
- } bind executeonly def % must be bound and hidden for .putgstringcopy
+ } bind executeonly odef % must be bound and hidden for .putgstringcopy
 
 currentdict /.putgstringcopy .undef
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_init.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_init.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_init.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -20,6 +20,11 @@
 %	%% Replace <n> <file(s)>
 % indicate places where the next <n> lines should be replaced by
 % the contents of <file(s)>, when creating a single merged init file.
+%
+% For reasons not clear to me, some cases of %% are being treated as
+% DSC comments when (and only when) the resource files are disk based
+% This can kill DSC parsing for pdfwrite at least, so avoid using
+% double % comments in this file.
 
 % The interpreter can call out to PostScript code.  All procedures
 % called in this way, and no other procedures defined in these
@@ -29,7 +34,7 @@
 % Interpreter library version number
 % NOTE: the interpreter code requires that the first non-comment token
 % in this file be an integer, and that it match the compiled-in version!
-925
+926
 
 % Check the interpreter revision.
 dup revision ne
@@ -136,12 +141,12 @@
          ifelse
   .bind def
 
-%% This was a debugging switch removed in 9.22, no other software
-%% should have had any regard for it, and even if testing its value
-%% should have checked its existence first. However pstotext, an
-%% ancient and no longer maintained piece of softare, did check
-%% its value unconditionally. So we retain this key in the dictionary
-%% purely for backward compatibility.
+% This was a debugging switch removed in 9.22, no other software
+% should have had any regard for it, and even if testing its value
+% should have checked its existence first. However pstotext, an
+% ancient and no longer maintained piece of softare, did check
+% its value unconditionally. So we retain this key in the dictionary
+% purely for backward compatibility.
 /NOBIND false def
 
 currentdict /BATCH known   /BATCH exch def
@@ -188,6 +193,16 @@
   currentdict /PARANOIDSAFER known or	% PARANOIDSAFER is equivalent
 }
 ifelse def
+
+/SAFERERRORS
+currentdict /NOSAFERERRORS known
+{
+  //false
+}
+{
+  currentdict /SAFERERRORS known
+} ifelse def
+
 currentdict /SHORTERRORS known   /SHORTERRORS exch def
 currentdict /TTYPAUSE known   /TTYPAUSE exch def
 currentdict /WRITESYSTEMDICT known   /WRITESYSTEMDICT exch def
@@ -831,12 +846,26 @@
 /.runstring {
   0 0 .systemvmstring .systemvmSFD cvx { .runexec } execute0
 } bind def
+
 % Define the procedure that the C code uses to set up for executing
 % a string that may be received in pieces.
+%
+% Immediate evaluation doesn't work on operators (like .needinput)
+% so calling .runstringbegin will throw an undefined error if we
+% undefined .needinput so it cannot be accessed outside the init
+% code. But, we can store the operator in an array, use immediate
+% evaluation on the array to get the operator, then undefined the
+% array (and because they are both of the same name, the operator
+% get undefined too).
+% This prevents random Postscript from erroneously calling .needinput
+% and forcing the interpreter into an invalid state.
+/.needinput
+1 .systemvmarray dup 0 /.needinput load put
+def
 /.runstringbegin {
-  1 .systemvmarray dup 0 /.needinput load put cvx	% { .needinput } in systemvm
+  1 .systemvmarray dup 0 //.needinput 0 get put cvx	% { .needinput } in systemvm
   0 0 .systemvmstring .systemvmSFD cvx .runexec
-} bind def
+} bind executeonly def
 
 % Define a special version of runlibfile that aborts on errors.
 /runlibfile0
@@ -1110,8 +1139,7 @@
    .setglobal
  } bind def
 ErrorNames
- { dup .registererror /VMerror eq {exit} if
- } forall
+ { .registererror} forall
 errordict begin
 % The handlers for interrupt and timeout are special; there is no
 % 'current object', so they push their own name.
@@ -1123,12 +1151,29 @@
  } bind def
 end		% errordict
 
-% Put all the default handlers in gserrordict
-gserrordict
-errordict {2 index 3 1 roll put} forall
-noaccess pop
-% remove the non-standard errors from errordict
+gserrordict /unknownerror errordict /unknownerror get put
 errordict /unknownerror .undef
+
+/.SAFERERRORLIST ErrorNames def
+/.setsafererrors
+{
+% Put all the requested handlers in gserrordict
+  gserrordict
+  //.SAFERERRORLIST
+  {
+    dup /unknownerror eq
+    {pop}
+    {
+      dup errordict exch get 2 index 3 1 roll put
+    }ifelse
+  }forall
+  noaccess pop
+  systemdict /.setsafeerrors .forceundef
+  systemdict /.SAFERERRORLIST .forceundef
+} bind executeonly odef
+
+SAFERERRORS {.setsafererrors} if
+
 % Define a stable private copy of handleerror that we will always use under
 % JOBSERVER mode.
 /.GShandleerror errordict /handleerror get def
@@ -1760,18 +1805,15 @@
 
 % Bind all the operators defined as procedures.
 /.bindoperators		% binds operators in currentdict
- { % Temporarily disable the typecheck error.
-   errordict /typecheck 2 copy get
-   errordict /typecheck { pop } put	% pop the command
+ {
    currentdict
     { dup type /operatortype eq
-       { % This might be a real operator, so bind might cause a typecheck,
-         % but we've made the error a no-op temporarily.
-         .bind
+       {
+         % This might be a real operator, so bind might cause a typecheck
+         {.bind} .internalstopped pop
        }
       if pop pop
     } forall
-   put
  } def
 DELAYBIND not { .bindoperators } if
 
@@ -2083,12 +2125,12 @@
   //SAFETY /safe //true .forceput % overrides readonly
 } .bind executeonly odef
 
-%% This is only used during startup. Its required so that
-%% we can detect in setpagdevice that we are in fact in startup
-%% and allocate a *global* instead of local VM. We need it to be
-%% global to satisfy Display PostScript (see start of /setpagdevice
-%% in gs_setpd.ps)
-%%
+% This is only used during startup. Its required so that
+% we can detect in setpagdevice that we are in fact in startup
+% and allocate a *global* instead of local VM. We need it to be
+% global to satisfy Display PostScript (see start of /setpagdevice
+% in gs_setpd.ps)
+%
 /.locksafeglobal {
   .locksafe_userparams
   systemdict /getenv {pop //false} put
@@ -2117,8 +2159,8 @@
   .locksafe
 } .bind executeonly odef
 
-%% See /.locksafeglobal above.
-%%
+% See /.locksafeglobal above.
+%
 /.setsafeglobal {
   SAFETY /safe get not {
     <<
@@ -2156,24 +2198,24 @@
 
 /UndefinePostScriptOperators {
 
-  %% This list is of Display PostScript operators. We believe that Display PostScript
-  %% was never fully implemented and the only known user, GNUStep, is no longer
-  %% using it. So lets remove it.
+  % This list is of Display PostScript operators. We believe that Display PostScript
+  % was never fully implemented and the only known user, GNUStep, is no longer
+  % using it. So lets remove it.
   [
   /condition /currentcontext /detach /.fork /join /.localfork /lock /monitor /notify
   /wait /yield /.currentscreenphase /.setscreenphase /.image2 /eoviewclip /initviewclip
   /viewclip /viewclippath /defineusername
-  %% NeXT DPS extensions
+  % NeXT DPS extensions
   /currentalpha /setalpha /.alphaimage /composite /compositerect /dissolve /sizeimagebox /.sizeimageparams
   ]
   {systemdict exch .forceundef} forall
 
-  %% This list is of operators which no longer appear to be used, and which we do not believe
-  %% to have any real use. For now we will undefine the operstors so they cannot easily be used
-  %% but can be easily restored (just delete the name from the list in the array). In future
-  %% we may remove the operator and the code implementation entirely.
+  % This list is of operators which no longer appear to be used, and which we do not believe
+  % to have any real use. For now we will undefine the operstors so they cannot easily be used
+  % but can be easily restored (just delete the name from the list in the array). In future
+  % we may remove the operator and the code implementation entirely.
   [
-  /.bitadd /.charboxpath /.cond /.countexecstack /.execstack /.runandhide /.popdevicefilter
+  /.bitadd /.charboxpath /.cond /.runandhide /.popdevicefilter
   /.execfile /.filenamesplit /.file_name_parent
   /.setdefaultmatrix /.isprocfilter /.unread /.psstringencode
   /.buildsampledfunction /.isencapfunction /.currentaccuratecurves /.currentcurvejoin /.currentdashadapt /.currentdotlength
@@ -2180,15 +2222,15 @@
   /.currentlimitclamp /.dotorientation /.setaccuratecurves /.setcurvejoin /.setdashadapt /.setdotorientation
   /.setlimitclamp /.currentscreenlevels /.dashpath /.pathbbox /.identeq /.identne /.tokenexec /.forgetsave /.pantonecallback
 
-  %% Used by our own test suite files
-  %%/.setdotlength % Bug687720.ps
+  % Used by our own test suite files
+  %/.setdotlength % Bug687720.ps
   ]
   {systemdict exch .forceundef} forall
 
-  %% This list of operators are used internally by various parts of the Ghostscript startup code.
-  %% Since each operator is a potential security vulnerability, and any operator listed here
-  %% is not required once the initialisation is complete and functions are bound, we undefine
-  %% the ones that aren't needed at runtime.
+  % This list of operators are used internally by various parts of the Ghostscript startup code.
+  % Since each operator is a potential security vulnerability, and any operator listed here
+  % is not required once the initialisation is complete and functions are bound, we undefine
+  % the ones that aren't needed at runtime.
   [
   /.callinstall /.callbeginpage /.callendpage
   /.currentstackprotect /.setstackprotect /.errorexec /.finderrorobject /.installsystemnames /.bosobject /.fontbbox
@@ -2211,7 +2253,8 @@
   /.shfill /.argindex /.bytestring /.namestring /.stringbreak /.stringmatch /.globalvmarray /.globalvmdict /.globalvmpackedarray /.globalvmstring
   /.localvmarray /.localvmdict /.localvmpackedarray /.localvmstring /.systemvmarray /.systemvmdict /.systemvmpackedarray /.systemvmstring /.systemvmfile /.systemvmlibfile
   /.systemvmSFD /.settrapparams /.currentsystemparams /.currentuserparams /.getsystemparam /.getuserparam /.setsystemparams /.setuserparams
-  /.checkpassword /.locale_to_utf8 /.currentglobal /.gcheck /.imagepath
+  /.checkpassword /.locale_to_utf8 /.currentglobal /.gcheck /.imagepath /.currentoutputdevice
+  /.type /.writecvs /.setSMask /.currentSMask /.needinput /.countexecstack /.execstack /.applypolicies
 
   % Used by a free user in the Library of Congress. Apparently this is used to
   % draw a partial page, which is then filled in by the results of a barcode
@@ -2230,9 +2273,9 @@
   % test files/utilities, or engineers expressed a desire to keep them visible.
   %
   %/currentdevice /.sort /.buildfont0 /.buildfont1 /.buildfont2 /.buildfont3 /.buildfont4 /.buildfont9 /.buildfont10 /.buildfont11
-  %/.buildfotn32 /.buildfont42 /.type9mapcid /.type11mapcid /.swapcolors
+  %/.buildfont32 /.buildfont42 /.type9mapcid /.type11mapcid /.swapcolors
   %/currentdevice  /.quit /.setuseciecolor /.needinput /.setoverprintmode /.special_op /.dicttomark /.knownget
-  %/.FAPIavailable /.FAPIpassfont /.FAPIrebuildfont /.FAPIBuildGlyph /.FAPIBuildChar /.FAPIBuildGlyph9
+  %/.FAPIBuildGlyph /.FAPIBuildChar /.FAPIBuildGlyph9
   %/.tempfile /.numicc_components /.set_outputintent  /.max /.min /.vmreclaim /.getpath /.setglobal
   %/.setdebug /.mementolistnewblocks /getenv
   ]
@@ -2242,12 +2285,12 @@
 } .bind executeonly def % must be bound and hidden for .forceundef
 
 /UndefinePDFOperators {
-  %% This list of operators are used internally by various parts of the Ghostscript PDF interpreter.
-  %% Since each operator is a potential security vulnerability, and any operator listed here
-  %% is not required once the initislisation is complete and functions are bound, we undefine
-  %% the ones that aren't needed at runtime.
-  %% This function is only called if DELAYBIND is true. It is a copy of the code at the end of pdf_main.ps
-  %% and must be maintained in parallel with it.
+  % This list of operators are used internally by various parts of the Ghostscript PDF interpreter.
+  % Since each operator is a potential security vulnerability, and any operator listed here
+  % is not required once the initislisation is complete and functions are bound, we undefine
+  % the ones that aren't needed at runtime.
+  % This function is only called if DELAYBIND is true. It is a copy of the code at the end of pdf_main.ps
+  % and must be maintained in parallel with it.
   [
   /.pdfawidthshow /.pdfwidthshow /.currentblackptcomp /.setblackptcomp
   /.setfillcolor /.setfillcolorspace /.setstrokecolor /.setstrokecolorspace /.currentrenderingintent /.setrenderingintent
@@ -2356,13 +2399,13 @@
 
 (END GLOBAL) VMDEBUG
 
-%% .savelocalstate is part of Display PostScript (if included). Part of the function of
-%% the .savelocalstate routine is to store the 'initial saved gstate' (savedinitialgstate)
-%% in systemdict. The code in dps1.c, gstate_check_space, disallows writing or creating
-%% gstates in global VM in certain conditions. If we execute setpagedevice before we
-%% reach this point, we must ensure that we do so using /..StartupGlobal so that
-%% the dictionary is defined in global VM, because the gstate contains a pointer to the
-%% device dictionary, and if that is allocated in local VM we will fail the gstate check.
+% .savelocalstate is part of Display PostScript (if included). Part of the function of
+% the .savelocalstate routine is to store the 'initial saved gstate' (savedinitialgstate)
+% in systemdict. The code in dps1.c, gstate_check_space, disallows writing or creating
+% gstates in global VM in certain conditions. If we execute setpagedevice before we
+% reach this point, we must ensure that we do so using /..StartupGlobal so that
+% the dictionary is defined in global VM, because the gstate contains a pointer to the
+% device dictionary, and if that is allocated in local VM we will fail the gstate check.
 /.savelocalstate where {
         % If we might create new contexts, save away copies of all dictionaries
         % referenced from systemdict that are stored in local VM,
@@ -2397,8 +2440,8 @@
 currentdict /.wheredict .undef
 currentdict /.renderingintentdict .undef
 
-%% If we are using DELAYBIND we have to defer the undefinition
-%% until .bindnow.
+% If we are using DELAYBIND we have to defer the undefinition
+% until .bindnow.
 DELAYBIND not {
   SAFER {
     //systemdict /SAFERUndefinePostScriptOperators get exec
@@ -2426,7 +2469,7 @@
   systemdict /superexec .undef
 } if
 
-%% Can't remove this one until the last minute :-)
+% Can't remove this one until the last minute :-)
 DELAYBIND not {
 systemdict /.undef .undef
 } if

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_lev2.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_lev2.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_lev2.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -163,10 +163,11 @@
         % Set them again to the new values.  From here on, we are safe,
         % since a context switch will consult userparams.
   .setuserparams
-} .bind executeonly def % must be bound and hidden for .forceput
+} .bind executeonly odef % must be bound and hidden for .forceput
 
 /setuserparams {		% <dict> setuserparams -
-    .setuserparams2
+    {.setuserparams2} stopped
+    {/setuserparams load $error /errorname get signalerror} if
 } .bind odef
 % Initialize user parameters managed here.
 /JobName () .definepsuserparam
@@ -415,7 +416,9 @@
 
 % VMReclaim and VMThreshold are user parameters.
 /setvmthreshold {		% <int> setvmthreshold -
-  mark /VMThreshold 2 .argindex .dicttomark .setuserparams2 pop
+  mark /VMThreshold 2 .argindex .dicttomark {.setuserparams2} stopped
+  {pop /setvmthreshold load $error /errorname get signalerror}
+  {pop} ifelse
 } odef
 /vmreclaim {			% <int> vmreclaim -
   dup 0 gt {
@@ -427,7 +430,9 @@
     ifelse
   } {
     % VMReclaim userparam controls enable/disable GC
-    mark /VMReclaim 2 index .dicttomark .setuserparams2 pop
+    mark /VMReclaim 2 index .dicttomark {.setuserparams2} stopped
+    {pop /vmreclaim load $error /errorname get signalerror}
+    {pop} ifelse
   } ifelse
 } odef
 -1 setvmthreshold
@@ -610,7 +615,14 @@
    .dicttomark setpagedevice
    /WaitTimeout exch mark /JobTimeout 5 2 roll .dicttomark setsystemparams
  } bind def
-/.setpagesize { 2 array astore /PageSize .dict1 setpagedevice } bind def
+/.setpagesize
+ { 2 copy 2 array astore /PageSize .dict1 { setpagedevice } stopped {
+     pop	% the setpagedevice dict
+     /setpagesize $error /errorname get signalerror
+   } {
+     pop pop	% success -- pop the arguments
+   } ifelse
+ } bind def
 /setduplexmode { /Duplex .dict1 setpagedevice } bind def
 /setmargins
  { exch 2 array astore /Margins .dict1 setpagedevice
@@ -624,7 +636,14 @@
    .dicttomark setpagedevice
  } bind def
 /setresolution
- { dup 2 array astore /HWResolution .dict1 setpagedevice
+ { count 1 lt { /setresolution /stackunderflow signalerror } if
+   dup type dup /integertype eq exch /realtype eq or not
+   {
+      /setresolution /typecheck signalerror
+   } if
+   dup 2 array astore /HWResolution .dict1 { setpagedevice } stopped {
+     pop /setresolution $error /errorname get signalerror
+   } if
  } bind def
 %END PAGEDEVICE
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_ll3.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_ll3.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_ll3.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -146,6 +146,10 @@
 } bind def
 
 /.bigstring {	% <size> .bigstring <string|bytestring>
+  count 1 lt { /.bigstring /stackunderflow signalerror } if
+  dup type /integertype ne {
+    /.bigstring /typecheck signalerror
+  } if
   dup 65400 gt { .bytestring } { string } ifelse
 } bind def
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -660,7 +660,7 @@
   {
     pop
   } ifelse
-} .bind executeonly def % must be bound and hidden for .forceput
+} .bind executeonly odef % must be bound and hidden for .forceput
 
 % Use the DSC processing hook to pass DSC comments to the driver.
 % We use a pseudo-parameter named DSC whose value is an array:

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_res.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_res.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_res.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -155,10 +155,10 @@
         } {
           /defineresource cvx /typecheck signaloperror
         } ifelse
-} bind def
+} bind executeonly odef
 /FindResource		% (redefined below)
         { .Instances exch get 0 get
-        } bind def
+        } bind executeonly def
 
                 % Additional entries
 
@@ -210,7 +210,7 @@
       /findresource .systemvar /typecheck signalerror
     } if
     /findresource cvx //.findresource .errorexec
-} odef
+} bind executeonly odef
 
 /defineresource {	% <key> <instance> <category> defineresource <instance>
     2 .argindex 2 index 2 index	% catch stackunderflow
@@ -226,7 +226,7 @@
         /DefineResource .resourceexec
         4 1 roll pop pop pop
     } .errorexec
-} bind odef
+} bind executeonly odef
 % We must prevent resourceforall from automatically restoring the stacks,
 % because we don't want the stacks restored if proc causes an error or
 % executes a 'stop'. On the other hand, resourceforall is defined in the
@@ -240,10 +240,10 @@
         % Stack: <template> <proc> <scratch> <category> proc
         exch pop		% pop the category
         exec end
-} bind def
+} bind executeonly def
 /resourceforall {	% <template> <proc> <scratch> <category> resourceforall1 -
         //resourceforall1 exec		% see above
-} bind odef
+} bind executeonly odef
 /resourcestatus {	% <key> <category> resourcestatus <status> <size> true
                         % <key> <category> resourcestatus false
   {
@@ -259,7 +259,7 @@
     % for error reporting. CET 23-26
     /resourcestatus cvx $error /errorname get signalerror
   } if
-} bind odef
+} bind executeonly odef
 /undefineresource {	% <key> <category> undefineresource -
   0 .argindex type /nametype ne {
     /undefinedresource cvx /typecheck signaloperror
@@ -272,7 +272,7 @@
     % here but uses operator for the errors above. CET 23-33
     /undefineresource cvx $error /errorname get signalerror
   } if
-} bind odef
+} bind executeonly odef
 
 % Define the system parameters used for the Generic implementation of
 % ResourceFileName.
@@ -412,7 +412,7 @@
   } ifelse
 } bind def
 
-/DefineResource {
+/DefineResource dup {
         .CheckResource
            { dup [ exch 0 -1 ]
                         % Stack: key value instance
@@ -441,7 +441,7 @@
            { /defineresource cvx /typecheck signaloperror
            }
         ifelse
-} .bind executeonly		% executeonly to prevent access to .forcedef
+} .bind executeonly .makeoperator		% executeonly to prevent access to .forcedef
 /UndefineResource
         {  { dup 2 index .knownget
               { dup 1 get 1 ge
@@ -457,7 +457,7 @@
            { 2 copy .Instances exch exec
            }
           if .LocalInstances exch exec
-        } bind
+        } bind executeonly
 % Because of some badly designed code in Adobe's CID font downloader that
 % makes findresource and resourcestatus deliberately inconsistent with each
 % other, the default FindResource must not call ResourceStatus if there is
@@ -483,7 +483,7 @@
            /findresource cvx .undefinedresource
           } ifelse
         } ifelse
-} bind
+} bind executeonly
 % Because of some badly designed code in Adobe's CID font downloader, the
 % definition of ResourceStatus for Generic and Font must be the same (!).
 % We patch around this by using an intermediate .ResourceFileStatus procedure.
@@ -493,10 +493,10 @@
         } {
           .ResourceFileStatus
         } ifelse
-} bind
+} bind executeonly
 /.ResourceFileStatus {
         .ResourceFile { closefile 2 -1 //true } { pop //false } ifelse
-} bind
+} bind executeonly
 /ResourceForAll {
                 % Construct a new procedure to hold the arguments.
                 % All objects constructed here must be in local VM to avoid
@@ -554,7 +554,7 @@
         3 2 roll pop % args
         { forall } 0 get
         currentdict end 2 .execn begin
-} bind
+} bind executeonly
 
 /ResourceFileName  {                          % /in (scr) --> (p/c/n)
   exch //.rfnstring cvs                       % (scr) (n)
@@ -586,7 +586,7 @@
     ifelse
   } ifelse
   exch copy                                   % (p/c/n)
-} bind
+} bind executeonly
 
                 % Additional entries
 
@@ -752,17 +752,17 @@
              ifelse
            }
           ifelse
-        } bind
+        } bind executeonly
    /UndefineResource
-        { /undefineresource cvx /invalidaccess signaloperror } bind
+        { /undefineresource cvx /invalidaccess signaloperror } bind executeonly
    /FindResource
         { .Instances 1 index .knownget
            { exch pop }
            { /findresource cvx .undefinedresource }
           ifelse
-        } bind
+        } bind executeonly
    /ResourceStatus
-        { .Instances exch known { 0 0 //true } { //false } ifelse } bind
+        { .Instances exch known { 0 0 //true } { //false } ifelse } bind executeonly
    /ResourceForAll
         /Generic .findcategory /ResourceForAll load end
 
@@ -865,7 +865,7 @@
     1 index .definedefaultcs
     currentglobal not { .userdict /.localcsdefaults //true put } if
   } if
-} bind
+} bind executeonly
 
 /UndefineResource {
   dup /Generic /Category findresource /UndefineResource get exec
@@ -888,7 +888,7 @@
   } {
     pop
   } ifelse
-} bind
+} bind executeonly
 
 .definecategory			% ColorSpace
 
@@ -918,7 +918,7 @@
     { exch copy exch pop }
     { /Generic /Category findresource /ResourceFileName get exec }
    ifelse
- } bind
+ } bind executeonly
 
 .definecategory			% Encoding
 
@@ -991,11 +991,11 @@
 /DefineResource
         { 2 copy //definefont exch pop
           /Generic /Category findresource /DefineResource get exec
-        } bind
+        } bind executeonly
 /UndefineResource
         { dup //undefinefont
           /Generic /Category findresource /UndefineResource get exec
-        } bind
+        } bind executeonly
 /FindResource {
         dup .getvminstance {
           exch pop 0 get
@@ -1006,14 +1006,14 @@
             .loadfontresource
           } ifelse
         } ifelse
-} bind
+} bind executeonly
 /ResourceForAll {
         { .scannextfontdir not { exit } if } loop
         /Generic /Category findresource /ResourceForAll get exec
-} bind
+} bind executeonly
 /.ResourceFileStatus {
         .fontstatus { pop 2 -1 //true } { pop //false } ifelse
-} bind
+} bind executeonly
 
 /.loadfontresource {
         dup .vmused exch
@@ -1063,10 +1063,10 @@
   { /Font defineresource } stopped {
       /definefont cvx $error /errorname get signalerror
   } if
-} bind odef
+} bind executeonly odef
 /undefinefont {
   /Font undefineresource
-} bind odef
+} bind executeonly odef
 % The Red Book requires that findfont be a procedure, not an operator,
 % but it still needs to restore the stacks reliably if it fails.
 /.findfontop {
@@ -1073,10 +1073,10 @@
   { /Font findresource } stopped {
     pop /findfont $error /errorname get signalerror
   } if
-} bind odef
+} bind executeonly odef
 /findfont {
   .findfontop
-} bind def	% Must be a procedure, not an operator
+} bind executeonly def	% Must be a procedure, not an operator
 
 % Remove initialization utilities.
 currentdict /.definecategory .undef

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_resmp.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_resmp.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_resmp.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -183,7 +183,7 @@
   % We don't check them.
 
   currentglobal //false setglobal                  % <object> bGlobal
-  countexecstack array execstack                   % <object> bGlobal [execstack]
+  //false .countexecstack array //false .execstack % <object> bGlobal [execstack]
   dup //null exch                                  % <object> bGlobal [execstack] null [execstack]
   length 3 sub -1 0 {                              % <object> bGlobal [execstack] null i
     2 index exch get                               % <object> bGlobal [execstack] null proc

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_setpd.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_setpd.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_setpd.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -608,60 +608,73 @@
 % in the <failed> dictionary with the policy value,
 % and we replace the key in the <merged> dictionary with its prior value
 % (or remove it if it had no prior value).
-/.policyprocs mark
+
 % These procedures are called with the following on the stack:
 %   <orig> <merged> <failed> <Policies> <key> <policy>
 % They are expected to consume the top 2 operands.
 % NOTE: we currently treat all values other than 0, 1, or 7 (for PageSize)
 % the same as 0, i.e., we signal an error.
-%
-% M. Sweet, Easy Software Products:
-%
-% Define NOMEDIAATTRS to turn off the default (but unimplementable) media
-% selection policies for setpagedevice.  This is used by CUPS to support
-% the standard Adobe media attributes.
-  0 {		% Set errorinfo and signal a configurationerror.
-      NOMEDIAATTRS {
-        % NOMEDIAATTRS means that the default policy is 7...
-        pop 2 index exch 7 put
-      } {
-        pop dup 4 index exch get 2 array astore
-        $error /errorinfo 3 -1 roll put
-        cleartomark
-        /setpagedevice .systemvar /configurationerror signalerror
-      } ifelse
-  } bind
-  1 {		% Roll back the failed request to its previous status.
-SETPDDEBUG { (Rolling back.) = pstack flush } if
-        3 index 2 index 3 -1 roll .forceput
-        4 index 1 index .knownget
-         { 4 index 3 1 roll .forceput }
-         { 3 index exch .undef }
-        ifelse
-  } .bind executeonly % must be bound and hidden for .forceput
-  7 {		% For PageSize only, just impose the request.
-        1 index /PageSize eq
-         { pop pop 1 index /PageSize 7 put }
-         { .policyprocs 0 get exec }
-        ifelse
-  } bind
-.dicttomark readonly def
+/0Policy {		% Set errorinfo and signal a configurationerror.
+  NOMEDIAATTRS {
+    % NOMEDIAATTRS means that the default policy is 7...
+    pop 2 index exch 7 put
+  } {
+    pop dup 4 index exch get 2 array astore
+    $error /errorinfo 3 -1 roll put
+    cleartomark
+    /setpagedevice .systemvar /configurationerror signalerror
+  } ifelse
+} bind executeonly odef
+
+% Making this an operator means we can properly hide
+% the contents - specifically .forceput
+/1Policy
+{
+  % Roll back the failed request to its previous status.
+  SETPDDEBUG { (Rolling back.) = pstack flush } if
+  3 index 2 index 3 -1 roll .forceput
+  4 index 1 index .knownget
+  { 4 index 3 1 roll .forceput }
+  { 3 index exch .undef }
+  ifelse
+} bind executeonly odef
+
+/7Policy {		% For PageSize only, just impose the request.
+  1 index /PageSize eq
+  { pop pop 1 index /PageSize 7 put }
+  { .policyprocs 0 get exec }
+  ifelse
+} bind executeonly odef
+
 /.applypolicies		% <orig> <merged> <failed> .applypolicies
                         %   <orig> <merged'> <failed'>
- { 1 index /Policies get 1 index
-    { type /integertype eq
-       { pop		% already processed
-       }
-       { 2 copy .knownget not { 1 index /PolicyNotFound get } if
-                        % Stack: <orig> <merged> <failed> <Policies> <key>
-                        %   <policy>
-         .policyprocs 1 index .knownget not { .policyprocs 0 get } if exec
-       }
-      ifelse
-    }
-   forall pop
- } bind def
+{
+  1 index /Policies get 1 index
+  { type /integertype eq
+     {
+       pop		% already processed
+     }{
+       2 copy .knownget not { 1 index /PolicyNotFound get } if
+                      % Stack: <orig> <merged> <failed> <Policies> <key>
+                      %   <policy>
+        dup 1 eq {
+          1Policy
+        }{
+          dup 7 eq {
+            7Policy
+          }{
+            0Policy
+          } ifelse
+        } ifelse
+     } ifelse
+  }
+  forall pop
+} bind executeonly odef
 
+currentdict /0Policy undef
+currentdict /1Policy undef
+currentdict /7Policy undef
+
 % Prepare to present parameters to the device, by spreading them onto the
 % operand stack and removing any that shouldn't be presented.
 /.prepareparams		% <params> .prepareparams -mark- <key1> <value1> ...
@@ -877,7 +890,13 @@
                 % Stack: mark <orig> <request> <merged> <failed>
 SETPDDEBUG { (Constructing.) = pstack flush } if
 
-   currentdevice .devicename 2 index /OutputDevice get eq
+   % Non-obvious: we need to check the name of the output device, to tell
+   % whether we're going to have to replace the entire device chain (which
+   % may be only one device, or may be multiple devices.
+   % If we're not replacing the entire change, we have to use the device in
+   % the graphics state, so the configuration of the entire device chain is
+   % correctly set.
+   .currentoutputdevice .devicename 2 index /OutputDevice get eq
     { currentdevice }
     { 1 index /OutputDevice get finddevice }
    ifelse
@@ -913,10 +932,15 @@
                 % Stack: mark ... <merged> <failed> <device> <eraseflag>
 SETPDDEBUG { (Installing.) = pstack flush } if
 
-    pop
+   pop
                 % .setdevice clears the current page device!
    .currentpagedevice pop exch
-   .setdevice pop
+   { .setdevice } stopped {
+     cleartomark exch pop
+     /setpagedevice $error /errorname get
+     signalerror
+   } if
+   pop
    .setpagedevice
 
                 % Implement UseCIEColor directly if this is a LL3 system.
@@ -997,7 +1021,7 @@
     .postinstall
   } ifelse
   setglobal           % return to original VM allocation mode
-} odef
+} bind executeonly odef
 
 % We break out the code after calling the Install procedure into a
 % separate procedure, since it is executed even if Install causes an error.

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_statd.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_statd.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_statd.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -39,20 +39,26 @@
 % These procedures are also accessed as data structures during initialization,
 % so the page dimensions must be the first two elements of the procedure.
 
-/.setpagesize { /statusdict .systemvar begin .setpagesize end } bind def
+/.setpagesize {
+   /statusdict .systemvar begin
+   { .setpagesize } stopped {
+     /setpagesize $error /errorname get signalerror
+   } if
+   end
+} bind def
 
                 % Page sizes defined by Adobe documentation
                 % Note: these executable arrays should all begin with two
                 % integers which are the width and height (see gs_setpd.ps).
- /11x17 {792 1224 //.setpagesize exec} bind def  % 11x17 portrait
- /a3 {842 1191 //.setpagesize exec} bind def
- /a4 {595 842 //.setpagesize exec} bind def
+ /11x17 {792 1224 //.setpagesize stopped { pop pop /11x17 $error /errorname get signalerror } if } bind def  % 11x17 portrait
+ /a3 {842 1191 //.setpagesize stopped { pop pop /a3 $error /errorname get signalerror } if } bind def
+ /a4 {595 842 //.setpagesize stopped { pop pop /a4 $error /errorname get signalerror } if } bind def
 % a4small should be a4 with an ImagingBBox of [25 25 570 817].
  /a4small /a4 load def
 % b5 see below.
- /ledger {1224 792 //.setpagesize exec} bind def  % 11x17 landscape
- /legal {612 1008 //.setpagesize exec} bind def
- /letter {612 792 //.setpagesize exec} bind def
+ /ledger {1224 792 //.setpagesize stopped { pop pop /ledger $error /errorname get signalerror } if } bind def  % 11x17 landscape
+ /legal {612 1008 //.setpagesize stopped { pop pop /legal $error /errorname get signalerror } if } bind def
+ /letter {612 792 //.setpagesize stopped { pop pop /letter $error /errorname get signalerror } if } bind def
 % lettersmall should be letter with an ImagingBBox of [25 25 587 767].
  /lettersmall /letter load def
 % note should be letter (or some other size) with the ImagingBBox
@@ -62,68 +68,68 @@
 
                 % Other page sizes
         % ISO standard paper sizes
- /a0 {2384 3370 //.setpagesize exec} bind def
- /a1 {1684 2384 //.setpagesize exec} bind def
- /a2 {1191 1684 //.setpagesize exec} bind def
-% /a3 {842 1191 //.setpagesize exec} bind def	% defined by Adobe
-% /a4 {595 842 //.setpagesize exec} bind def	% defined by Adobe
- /a5 {420 595 //.setpagesize exec} bind def
- /a6 {297 420 //.setpagesize exec} bind def
- /a7 {210 297 //.setpagesize exec} bind def
- /a8 {148 210 //.setpagesize exec} bind def
- /a9 {105 148 //.setpagesize exec} bind def
- /a10 {73 105 //.setpagesize exec} bind def
+ /a0 {2384 3370 //.setpagesize stopped { pop pop /a0 $error /errorname get signalerror } if } bind def
+ /a1 {1684 2384 //.setpagesize stopped { pop pop /a1 $error /errorname get signalerror } if } bind def
+ /a2 {1191 1684 //.setpagesize stopped { pop pop /a2 $error /errorname get signalerror } if } bind def
+% /a3 {842 1191 //.setpagesize stopped { pop pop /a3 $error /errorname get signalerror } if } bind def	% defined by Adobe
+% /a4 {595 842 //.setpagesize stopped { pop pop /a4 $error /errorname get signalerror } if } bind def	% defined by Adobe
+ /a5 {420 595 //.setpagesize stopped { pop pop /a5 $error /errorname get signalerror } if } bind def
+ /a6 {297 420 //.setpagesize stopped { pop pop /a6 $error /errorname get signalerror } if } bind def
+ /a7 {210 297 //.setpagesize stopped { pop pop /a7 $error /errorname get signalerror } if } bind def
+ /a8 {148 210 //.setpagesize stopped { pop pop /a8 $error /errorname get signalerror } if } bind def
+ /a9 {105 148 //.setpagesize stopped { pop pop /a9 $error /errorname get signalerror } if } bind def
+ /a10 {73 105 //.setpagesize stopped { pop pop /a10 $error /errorname get signalerror } if } bind def
 % ISO and JIS B sizes are different....
- /isob0 {2835 4008 //.setpagesize exec} bind def
+ /isob0 {2835 4008 //.setpagesize stopped { pop pop /isob0 $error /errorname get signalerror } if } bind def
  /b0 /isob0 load def
- /isob1 {2004 2835 //.setpagesize exec} bind def
+ /isob1 {2004 2835 //.setpagesize stopped { pop pop /isob1 $error /errorname get signalerror } if } bind def
  /b1 /isob1 load def
- /isob2 {1417 2004 //.setpagesize exec} bind def
+ /isob2 {1417 2004 //.setpagesize stopped { pop pop /isob2 $error /errorname get signalerror } if } bind def
  /b2 /isob2 load def
- /isob3 {1001 1417 //.setpagesize exec} bind def
+ /isob3 {1001 1417 //.setpagesize stopped { pop pop /isob3 $error /errorname get signalerror } if } bind def
  /b3 /isob3 load def
- /isob4 {709 1001 //.setpagesize exec} bind def
+ /isob4 {709 1001 //.setpagesize stopped { pop pop /isob4 $error /errorname get signalerror } if } bind def
  /b4 /isob4 load def
- /isob5 {499 709 //.setpagesize exec} bind def
+ /isob5 {499 709 //.setpagesize stopped { pop pop /isob5 $error /errorname get signalerror } if } bind def
  /b5 /isob5 load def
- /isob6 {354 499 //.setpagesize exec} bind def
+ /isob6 {354 499 //.setpagesize stopped { pop pop /isob6 $error /errorname get signalerror } if } bind def
  /b6 /isob6 load def
- /jisb0 {2920 4127 //.setpagesize exec} bind def
- /jisb1 {2064 2920 //.setpagesize exec} bind def
- /jisb2 {1460 2064 //.setpagesize exec} bind def
- /jisb3 {1032 1460 //.setpagesize exec} bind def
- /jisb4 {729 1032 //.setpagesize exec} bind def
- /jisb5 {516 729 //.setpagesize exec} bind def
- /jisb6 {363 516 //.setpagesize exec} bind def
- /c0 {2599 3677 //.setpagesize exec} bind def
- /c1 {1837 2599 //.setpagesize exec} bind def
- /c2 {1298 1837 //.setpagesize exec} bind def
- /c3 {918 1298 //.setpagesize exec} bind def
- /c4 {649 918 //.setpagesize exec} bind def
- /c5 {459 649 //.setpagesize exec} bind def
- /c6 {323 459 //.setpagesize exec} bind def
+ /jisb0 {2920 4127 //.setpagesize stopped { pop pop /jisb0 $error /errorname get signalerror } if } bind def
+ /jisb1 {2064 2920 //.setpagesize stopped { pop pop /jisb1 $error /errorname get signalerror } if } bind def
+ /jisb2 {1460 2064 //.setpagesize stopped { pop pop /jisb2 $error /errorname get signalerror } if } bind def
+ /jisb3 {1032 1460 //.setpagesize stopped { pop pop /jisb3 $error /errorname get signalerror } if } bind def
+ /jisb4 {729 1032 //.setpagesize stopped { pop pop /jisb4 $error /errorname get signalerror } if } bind def
+ /jisb5 {516 729 //.setpagesize stopped { pop pop /jisb5 $error /errorname get signalerror } if } bind def
+ /jisb6 {363 516 //.setpagesize stopped { pop pop /jisb6 $error /errorname get signalerror } if } bind def
+ /c0 {2599 3677 //.setpagesize stopped { pop pop /c0 $error /errorname get signalerror } if } bind def
+ /c1 {1837 2599 //.setpagesize stopped { pop pop /c1 $error /errorname get signalerror } if } bind def
+ /c2 {1298 1837 //.setpagesize stopped { pop pop /c2 $error /errorname get signalerror } if } bind def
+ /c3 {918 1298 //.setpagesize stopped { pop pop /c3 $error /errorname get signalerror } if } bind def
+ /c4 {649 918 //.setpagesize stopped { pop pop /c4 $error /errorname get signalerror } if } bind def
+ /c5 {459 649 //.setpagesize stopped { pop pop /c5 $error /errorname get signalerror } if } bind def
+ /c6 {323 459 //.setpagesize stopped { pop pop /c6 $error /errorname get signalerror } if } bind def
         % U.S. CAD standard paper sizes
- /archE {2592 3456 //.setpagesize exec} bind def
- /archD {1728 2592 //.setpagesize exec} bind def
- /archC {1296 1728 //.setpagesize exec} bind def
- /archB {864 1296 //.setpagesize exec} bind def
- /archA {648 864 //.setpagesize exec} bind def
+ /archE {2592 3456 //.setpagesize stopped { pop pop /archE $error /errorname get signalerror } if } bind def
+ /archD {1728 2592 //.setpagesize stopped { pop pop /archD $error /errorname get signalerror } if } bind def
+ /archC {1296 1728 //.setpagesize stopped { pop pop /archC $error /errorname get signalerror } if } bind def
+ /archB {864 1296 //.setpagesize stopped { pop pop /archB $error /errorname get signalerror } if } bind def
+ /archA {648 864 //.setpagesize stopped { pop pop /archA $error /errorname get signalerror } if } bind def
         % Other paper sizes
- /flsa {612 936 //.setpagesize exec} bind def  % U.S. foolscap
- /flse {612 936 //.setpagesize exec} bind def  % European foolscap
- /halfletter {396 612 //.setpagesize exec} bind def
+ /flsa {612 936 //.setpagesize stopped { pop pop /flsa $error /errorname get signalerror } if } bind def  % U.S. foolscap
+ /flse {612 936 //.setpagesize stopped { pop pop /flse $error /errorname get signalerror } if } bind def  % European foolscap
+ /halfletter {396 612 //.setpagesize stopped { pop pop /halfletter $error /errorname get signalerror } if } bind def
         % minimum of a4 and letter (a4 width, letter length)
- /pa4 {595 792 //.setpagesize exec} bind def
+ /pa4 {595 792 //.setpagesize stopped { pop pop /pa4 $error /errorname get signalerror } if } bind def
         % Japanese postcard size, 100mm x 148mm
- /hagaki {283 420 //.setpagesize exec} bind def
+ /hagaki {283 420 //.setpagesize stopped { pop pop /hagaki $error /errorname get signalerror } if } bind def
         % U.S. ANSI/ASME Y14.1 paper sizes
  /ANSI_A  //letter def
  /ANSI_B  //11x17  def
  /tabloid //11x17  def
- /ANSI_C {1224 1585 //.setpagesize exec} bind def
- /ANSI_D {1585 2448 //.setpagesize exec} bind def
- /ANSI_E {2448 3168 //.setpagesize exec} bind def
- /ANSI_F {2016 2880 //.setpagesize exec} bind def
+ /ANSI_C {1224 1585 //.setpagesize stopped { pop pop /ANSI_C $error /errorname get signalerror } if } bind def
+ /ANSI_D {1585 2448 //.setpagesize stopped { pop pop /ANSI_D $error /errorname get signalerror } if } bind def
+ /ANSI_E {2448 3168 //.setpagesize stopped { pop pop /ANSI_E $error /errorname get signalerror } if } bind def
+ /ANSI_F {2016 2880 //.setpagesize stopped { pop pop /ANSI_F $error /errorname get signalerror } if } bind def
 %END SIZES
 currentdict end
 dup /.setpagesize .undef
@@ -158,19 +164,19 @@
 
 % Tray and format selection
 
- /11x17tray {/11x17 .uservar exec} bind def
- /a3tray {/a3 .uservar exec} bind def
- /a4tray {/a4 .uservar exec} bind def
- /a5tray {/a5 .uservar exec} bind def
- /a6tray {/a6 .uservar exec} bind def
- /b4tray {/b4 .uservar exec} bind def
- /b5tray {/b5 .uservar exec} bind def
- /flsatray {/flsa .uservar exec} bind def
- /flsetray {/flse .uservar exec} bind def
- /halflettertray {/halfletter .uservar exec} bind def
- /ledgertray {/ledger .uservar exec} bind def
- /legaltray {/legal .uservar exec} bind def
- /lettertray {/letter .uservar exec} bind def
+ /11x17tray {/11x17 .uservar stopped { pop pop /11x17tray $error /errorname get signalerror } if } bind def
+ /a3tray {/a3 .uservar stopped { pop pop /a3tray $error /errorname get signalerror } if } bind def
+ /a4tray {/a4 .uservar stopped { pop pop /a4tray $error /errorname get signalerror } if } bind def
+ /a5tray {/a5 .uservar stopped { pop pop /a5tray $error /errorname get signalerror } if } bind def
+ /a6tray {/a6 .uservar stopped { pop pop /a6tray $error /errorname get signalerror } if } bind def
+ /b4tray {/b4 .uservar stopped { pop pop /b4tray $error /errorname get signalerror } if } bind def
+ /b5tray {/b5 .uservar stopped { pop pop /b5tray $error /errorname get signalerror } if } bind def
+ /flsatray {/flsa .uservar stopped { pop pop /flsatray $error /errorname get signalerror } if } bind def
+ /flsetray {/flse .uservar stopped { pop pop /flsetray $error /errorname get signalerror } if } bind def
+ /halflettertray {/halfletter .uservar stopped { pop pop /halflettertray $error /errorname get signalerror } if } bind def
+ /ledgertray {/ledger .uservar stopped { pop pop /ledgertray $error /errorname get signalerror } if } bind def
+ /legaltray {/legal .uservar stopped { pop pop /legaltray $error /errorname get signalerror } if } bind def
+ /lettertray {/letter .uservar stopped { pop pop /lettertray $error /errorname get signalerror } if } bind def
 
 % Per-job parameters
 
@@ -261,9 +267,17 @@
                 % The Adobe documentation only defines setpagetype
                 % (a Level 1 operator) as accepting the values 0 and 1,
                 % so we do too.
-      {/letter /note} 1 index get
-      //systemdict /userdict get exch get cvx exec
-      /pagetype exch def
+      dup type /integertype ne {
+        /setpage /typecheck signalerror
+      } {
+        dup 0 ne 1 index 1 ne or {
+          /setpage /rangecheck signalerror
+        } {
+          {/letter /note} 1 index get
+          //systemdict /userdict get exch get cvx exec
+        } ifelse
+        /pagetype exch def
+    } ifelse
     end
   } bind def
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ32.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ32.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ32.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -79,15 +79,19 @@
 .dicttomark /ProcSet defineresource pop
 
 /.cidfonttypes where { pop } { /.cidfonttypes 6 dict def } ifelse
-.cidfonttypes begin
-
-4	% CIDFontType 4 = FontType 32
-{ dup /FontType 32 .forceput
+/CIDFontType4
+{
+  dup /FontType 32 .forceput
   dup /CharStrings 20 dict .forceput
   1 index exch .buildfont32 exch pop
-} .bind executeonly def % must be bound and hidden for .forceput
+} .bind executeonly odef
+.cidfonttypes begin
 
+
+4 /CIDFontType4 load def % CIDFontType 4 = FontType 32
+
 end		% .cidfonttypes
+currentdict /CIDFontType4 .forceundef
 
 % Define the BuildGlyph procedure.
 % Since Type 32 fonts are indexed by CID, there is no BuildChar procedure.

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_type1.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_type1.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_type1.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -166,7 +166,7 @@
         % However, we can't use any of the other well-known dictionaries
         % (such as userdict), since the whole point of pushing systemdict
         % is to make sure that nothing important has been redefined.
-   /userdict .systemvar begin
+   32 dict begin
         % We can't just use `run', because we want to check for .PFB files.
    currentpacking
     { //false setpacking .loadfont1 //true setpacking }
@@ -283,7 +283,7 @@
   } if
   2 copy /WeightVector exch .forceput
   .setweightvector
-} .bind executeonly def
+} .bind executeonly odef
 end
 
 % Register the font types for definefont.

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -218,7 +218,7 @@
       } ifelse
     } ifelse
   } ifelse
-} bind executeonly def
+} bind executeonly odef
 /PDFScanRules_true << /PDFScanRules //true >> def
 /PDFScanRules_null << /PDFScanRules //null >> def
 /.pdfrun {			% <file> <opdict> .pdfrun -
@@ -395,7 +395,14 @@
     dup Objects exch array dup 3 1 roll copy pop /Objects exch def
   } if
   dup Generations length gt {
-    dup Generations exch string dup 3 1 roll copy pop /Generations exch def
+    %% Initiallly Generations is a string, but the xref rebuilding code
+    %% can convert it to an array (/setxrefentry in pdf_rbld.ps). So we
+    %% need to be able to deal with either case.
+    Generations type /stringtype eq {
+      dup Generations exch string dup 3 1 roll copy pop /Generations exch def
+    } {
+      dup Generations exch array dup 3 1 roll copy pop /Generations exch def
+    } ifelse
   } if
   dup IsGlobal length gt {
     dup IsGlobal exch string dup 3 1 roll copy pop /IsGlobal exch def

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -1158,7 +1158,7 @@
   Q
   PDFDEBUG { pdfdict /PDFSTEPcount .knownget { 1 le } { //true } ifelse { (%End PaintProc) print dup === flush } if } if
   PDFfile exch setfileposition
-} bind executeonly def
+} bind executeonly odef
 
 /.pdfpaintproc {
     %% Get the /m from pdfopdict (must be present)
@@ -1189,7 +1189,7 @@
     {
       switch_to_text_marking_ops
     } if
-}bind executeonly def
+}bind executeonly odef
 
 /resolvepattern {	% <patternstreamdict> resolvepattern <patterndict>
                 % Don't do the resolvestream now: just capture the data
@@ -2353,7 +2353,7 @@
   }{
     pdfdict /AppearanceNumber 0 .forceput
   } ifelse
-}bind executeonly def
+}bind executeonly odef
 
 /MakeAppearanceName {
   pdfdict /AppearanceNumber get
@@ -2382,7 +2382,7 @@
   DoForm
   pdfdict /.PreservePDFForm 3 -1 roll .forceput
   grestore
-} bind executeonly def
+} bind executeonly odef
 
 /DoForm {
   %% save the current value, if its true we will set it to false later, in order
@@ -2541,7 +2541,7 @@
     end
   } if
   pdfdict /.PreservePDFForm 3 -1 roll .forceput
-} bind executeonly def
+} bind executeonly odef
 
 /_dops_save 1 array def
 
@@ -3445,6 +3445,19 @@
     } if
   }bind executeonly def
 
+  /ValidateAP {
+    dup /AP oknown {
+        dup /AP oget
+        /N oknown not {
+          //false
+        } {
+          //true
+        } ifelse
+    } {
+      //false
+    }ifelse
+  } bind executeonly def
+
   % x0 y0 x1 y1 x2 y2 x3 y3 -> x0 y0 x1-x0 y1-y0 x2-x0 y2-y0
   /quadpoints2basis {
     8 { oforce 8 1 roll } repeat
@@ -3489,9 +3502,10 @@
   } bind executeonly def
 
   /Square {
-    dup /AP oknown {
+    //ValidateAP exec
+    {
       //true
-    }{
+    } {
       gsave
       //startannottransparency exec
       dup
@@ -3532,9 +3546,10 @@
 }bind executeonly def
 
   /Circle {
-    dup /AP oknown {
+    //ValidateAP exec
+    {
       //true
-    }{
+    } {
       gsave
       //startannottransparency exec
       dup annotrect 4 2 roll exch 3 index 2 div add exch 2 index 2 div add
@@ -3549,9 +3564,10 @@
   } bind executeonly def
 
   /Polygon {
-    dup /AP oknown {
+    //ValidateAP exec
+    {
       //true
-    }{
+    } {
       gsave
       //startannottransparency exec
       dup /Vertices knownoget {
@@ -3802,7 +3818,8 @@
   currentdict end readonly def
 
   /Line  {
-    dup /AP oknown {
+    //ValidateAP exec
+    {
       //true
     } {
       gsave
@@ -3844,9 +3861,10 @@
   } bind executeonly def
 
   /PolyLine {
-    dup /AP oknown {
+    //ValidateAP exec
+    {
       //true
-    }{
+    } {
       gsave
       //startannottransparency exec
       dup /Vertices knownoget {
@@ -3916,7 +3934,8 @@
 
   /Ink { % <annot> -> <annot> <true>
          % <annot> -> <false>
-    dup /AP oknown {
+    //ValidateAP exec
+    {
       //true
     } {
       //startannottransparency exec
@@ -3967,7 +3986,8 @@
   } bind executeonly def
 
   /Underline {
-    dup /AP oknown {
+    //ValidateAP exec
+    {
       //true
     } {
       0 setlinecap
@@ -4006,7 +4026,8 @@
   } bind executeonly def
 
   /StrikeOut {
-    dup /AP oknown {
+    //ValidateAP exec
+    {
       //true
     } {
       0 setlinecap
@@ -4067,12 +4088,10 @@
   /emptydict 0 dict readonly def
 
   /Highlight {
-% technically we should apply an appearance stream if we have one, but if we do
-% some test files don't match Acrobat. PDF 2.0 says appearance streams are mandatory,
-% and take precedence over generatig new ones, so we may need to revisit this.
-%    dup /AP oknown {
-%      //true
-%    }{
+    //ValidateAP exec
+    {
+      //true
+    } {
     0 setlinecap
     dup annotsetcolor {
       /QuadPoints knownoget {
@@ -4096,13 +4115,14 @@
       } if
     } if
     //false
-%    } ifelse
+    } ifelse
   } bind executeonly def
   currentdict /emptydict undef
   currentdict /highlight-arc undef
 
   /Squiggly {
-    dup /AP oknown {
+    //ValidateAP exec
+    {
       //true
     } {
       //startannottransparency exec
@@ -4160,7 +4180,8 @@
   } bind executeonly def
 
   /Text {
-    dup /AP oknown {
+    //ValidateAP exec
+    {
       //true
     } {
       //startannottransparency exec
@@ -4202,16 +4223,10 @@
   } bind executeonly def
 
   /FreeText {
-    dup /AP knownoget {
-        %% Check minimal entriy in /AP dictionary
-        /N known not {
-          //true
-        }{
-          //false
-        }ifelse
-      } {
-        //true
-    }ifelse
+    //ValidateAP exec
+    {
+      //true
+    }
     %% We either have no appearance, or its invalid, make one up.
     {
       gsave
@@ -4382,9 +4397,6 @@
       //endannottransparency exec
       //false
       grestore
-    }
-    {
-      //true
     } ifelse
   } bind executeonly def
 
@@ -4499,7 +4511,8 @@
   {/text/frame/red/green/blue} {currentdict exch undef} forall
 
   /Stamp  {
-    dup /AP oknown {
+    //ValidateAP exec
+    {
       //true
     } {
       //startannottransparency exec
@@ -4533,9 +4546,10 @@
   /Popup {
     dup /Open oknown {
       dup /Open get {
-        dup /AP oknown {
+        //ValidateAP exec
+        {
           //true
-        }{
+        } {
           gsave
           //startannottransparency exec
           newpath
@@ -4624,7 +4638,8 @@
     %% until the content is removed, before that the content should be present and
     %% I beleive we should print it. So take no action for Redact annotations if they
     %% have no appearance.
-    dup /AP oknown {
+    //ValidateAP exec
+    {
       //true
     } {
       //false
@@ -4633,6 +4648,7 @@
 
 currentdict /startannottransparency undef
 currentdict /endannottransparency undef
+currentdict /ValidateAP undef
 currentdict /quadpoints2basis undef
 currentdict /drawellipse undef
 currentdict end readonly def

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_font.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_font.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_font.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -718,7 +718,7 @@
   {pop pop pop}
   ifelse
 
-} bind executeonly def
+} bind executeonly odef
 
 currentdict /.DoToUnicode? .forceundef
 
@@ -1179,8 +1179,16 @@
     /CharProcs 1 index /CharProcs oget def
     1 index /Widths knownoget {
       /Widths exch def
-      /FirstChar 1 index /FirstChar oget def
-      /LastChar 1 index /LastChar oget def
+      1 index /FirstChar known 2 index /LastChar known and {
+        /FirstChar 1 index /FirstChar oget def
+        /LastChar 1 index /LastChar oget def
+      } {
+       (   **** Error: Requireed entry FirstChar or LastChar is missing from Font.\n)
+       pdfformaterror
+       (               Output may be incorrect.\n) pdfformaterror
+        /FirstChar 0 def
+        /LastChar Widths length def
+      }ifelse
     } if
     /FontName 1 index /Name knownoget not { /PDFType3Untitled } if def
     /Encoding .notdefEncoding 2 index getencoding def
@@ -1241,7 +1249,7 @@
     } bdef
     dup currentdict Encoding .processToUnicode
     currentdict end .completefont exch pop
-} bind executeonly def
+} bind executeonly odef
 /.adjustcharwidth {	% <wx> <wy> .adjustcharwidth <wx'> <wy'>
   % Enforce the metrics, in glyph space, to the values found in the PDF Font object
   % - force wy == 0 (assumed, and not stored in the PDF font)
@@ -1475,6 +1483,16 @@
   //CMap_read_dict begin
   /CIDInit /ProcSet findresource begin
   12 dict begin
+  /o.endmapvalue /.endmapvalue load def
+  /.endmapvalue
+  {
+    dup 65535 gt
+    {
+      (   **** Warning: CMap: CID out of valid range (0-65535).\n)  pdfformatwarning
+      pop 65535
+    } if
+    o.endmapvalue
+  } bind def
   4 2 roll
   dup //null eq { pop } { /WMode exch def } ifelse
   dup //null eq { pop } { /CIDSystemInfo exch def } ifelse
@@ -1482,6 +1500,7 @@
   /.last_CMap_def currentdict def % establish binding
   mark exch % emulate 'begincodespacerange'
   0 (endcmap) /SubFileDecode filter cvx /begincmap cvx exch 2 .execn
+  currentdict /o.endmapvalue undef
   endcmap
   /.last_CMap_def load
   { currentdict end //CMap_read_dict eq { exit } if } loop
@@ -1849,8 +1868,16 @@
 /findCIDFont {
   {
     dup /CIDFont resourcestatus {
-      pop pop /CIDFont findresource
-      exit
+      pop %size
+      % Check status. If its 1 then we loaded this CIDFont resource from disk, and
+      % its safe to use it. If its 0 then it was loaded from the PDF file and its
+      % *not* safe to use as a replacement for a missing font. If its 2 then its
+      % not loaded, but is available from external resource and is safe to use. So
+      % if status is 0, *don't* use this CIDFont.
+      0 eq not {
+        /CIDFont findresource
+        exit
+      }if
     } if
     .remove_font_name_prefix
     dup dup length string cvs
@@ -2026,7 +2053,7 @@
     } if
     /findresource cvx /undefined signalerror
   } loop
-} bind executeonly def
+} bind executeonly odef
 
 /buildCIDType0 {	% <CIDFontType0-font-resource> buildCIDType0 <font>
   dup /BaseFont get findCIDFont exch pop
@@ -2211,7 +2238,7 @@
   /Type0 //buildType0
   /Type1 //buildType1
   /MMType1 //buildType1
-  /Type3 //buildType3
+  /Type3 /buildType3 load
   /TrueType //buildTrueType
   /CIDFontType0 //buildCIDType0
   /CIDFontType2 //buildCIDType2
@@ -2521,6 +2548,7 @@
       pop pop pop pop
       //d0 exec
     } {
+      currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors
       6 -2 roll .adjustcharwidth 6 2 roll setcachedevice
     } ifelse
   } bind executeonly def

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -660,7 +660,7 @@
     } forall
     pop
   } ifelse
-} bind executeonly def
+} bind executeonly odef
 
 currentdict /pdf_collection_files .undef
 
@@ -1952,22 +1952,30 @@
   Trailer /Root knownoget {
     /Pages knownoget {
       10 dict begin
+      /Count pdfpagecount def
       /verify_page_tree_recursive {
-        dup 1 def
-        dup /Kids knownoget {
-          { oforce
-            dup //null ne {
-              currentdict 1 index known {
-                (   **** Error: there's a loop in the Pages tree. Giving up.\n) pdfformaterror
-                /verify_page_tree cvx /syntaxerror signalerror
-              } if
-              verify_page_tree_recursive
-            } {
-              pop
-            } ifelse
-          } forall
-        } if
-        currentdict exch undef
+        Count 0 gt {
+          dup 1 def
+          dup /Kids knownoget {
+            { oforce
+              dup //null ne {
+                currentdict 1 index known {
+                  (   **** Error: there's a loop in the Pages tree. Giving up.\n) pdfformaterror
+                  /verify_page_tree cvx /syntaxerror signalerror
+                } if
+                verify_page_tree_recursive
+              } {
+                pop
+              } ifelse
+            } forall
+          } {
+            /Count Count 1 sub def
+          }ifelse
+          currentdict exch undef
+          } {
+            pop
+            (   **** Error: Too many pages in Page tree.\n) pdfformaterror
+        } ifelse
       } def
       verify_page_tree_recursive
       end
@@ -2631,10 +2639,9 @@
         % (eg GSView 5) then it will not be present, so we must rescan.
   currentpagedevice /PageUsesTransparency .knownget not {dup pageusestransparency} if
   dup /PDFusingtransparency exch def {
-    % If the current device isn't ProcessColorModel /DeviceCMYK, or if it is a
-    % HighLevelDevice (pdfwrite) we don't need the special handling of Overprint
-    % transparency, so disable the checking.
-    currentpagedevice dup /ProcessColorModel get /DeviceCMYK ne exch /HighLevelDevice known or {
+    % If the current device isn't CMYK, or if it is a HighLevelDevice (pdfwrite) we
+    % don't need the special handling of Overprint transparency, so disable the checking.
+    currentpagedevice dup /Colors get 4 lt exch /HighLevelDevice known or {
       /checkOPtrans { pop false } def	% NB: original will be restored from PDFsave
     } if
     % Show the page within a PDF 1.4 device filter.
@@ -2715,13 +2722,34 @@
   .setglobal
   /RepairedAnError exch def
   /Repaired exch def
-} bind executeonly def
+} bind executeonly odef
 
 % Display the contents of a page (including annotations).
 /showpagecontents {	% <pagedict> showpagecontents -
   dup		% Save the pagedict for the Annotations
+
+  % We do a 'save' here in order to allow us to restore at the end of the page, before
+  % we run the annotations. There are two reasons for this; firstly so that the graphics state
+  % at the time we run the annotations is the same as when we ran the page, secondly in order
+  % to empty the font cache before we run the annotations.
+  %
+  % Bug #700096 an annotation uses Helvetica but doesn't embed it, however the page *does*
+  % use an embedded Helvetica, which is subset and not prefixed as such. For this file to
+  % render correctly we must not use the font from the page, but must find a replacement.
+  % However the file for Bug #695897 has a page which uses two versions of the same font,
+  % one embedded, one not. In order for *that* file to render correctly we *must* use the
+  % embedded font as a substitute for the missing font. So we divorce the fonts used
+  % for the page from the fonts used for Annotations, this allows both files to work as
+  % expected.
+  %
+  % We also need a countdictstack, so that we can check the dictionaries on the dictioanry
+  % stack after we run the page contents, and 'end' an extra ones before we try to restore
+  % otherwise we might try to restore back to a point before one of those dictionaries existed.
+  %
+  save
+  countdictstack
+  3 -1 roll
   count 1 sub  /pdfemptycount exch store
-  /pdfemptycount where pop /annot_gstate gstate currentgstate put	% preserve gstate for Annots later
   /Contents knownoget not { 0 array } if
   dup type /arraytype ne { 1 array astore } if {
     oforce dup type /dicttype eq {
@@ -2741,7 +2769,21 @@
   } {
     pop
   } ifelse
-  annot_gstate setgstate	% restore the gstate for Annots
+
+  % Top of the stack should ow be the count of dictionaries on the stack at the time
+  % we did a save. If there are more than there were then, end dictionaries until
+  % we get back to the sme number.
+  {
+    countdictstack 1 index le {exit}if
+    end
+  } loop
+  % discard the count of dictionaries
+  pop
+  % and restore the state. This will take us back to a point before any fonts
+  % used on the page were defined, so the annotations won't inherit any of
+  % them.
+  restore
+
   % Draw the annotations
   //systemdict /ShowAnnots .knownget not { //true } if {
     /Annots knownoget {

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_ops.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_ops.ps	2018-11-21 22:00:23 UTC (rev 49214)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_ops.ps	2018-11-21 22:02:45 UTC (rev 49215)
@@ -193,7 +193,7 @@
       pdfformaterror
     } ifelse
   } if
-} bind executeonly def
+} bind executeonly odef
 
 % Save PDF gstate
 /qstate {       % - qstate <qstate>
@@ -451,7 +451,7 @@
   %% a gsave, so we haven't copied it to /self, if we don't do that here
   %% then transparent annotations cause an invalid access error.
   currentdict //nodict eq {/self dup load end 5 dict begin def} if
-} bind executeonly def
+} bind executeonly odef
 /AIS { .setalphaisshape } bind executeonly def
 /BM {
   /.setblendmode where {
@@ -1077,7 +1077,7 @@
     pdfopdict /v {inside_text_v} bind .forceput
     pdfopdict /y {inside_text_y} bind .forceput
     pdfopdict /re {inside_text_re} bind .forceput
-} bind executeonly def
+} bind executeonly odef
 
 /switch_to_normal_marking_ops {
     pdfopdict /m {normal_m} bind .forceput
@@ -1086,7 +1086,7 @@
     pdfopdict /v {normal_v} bind .forceput
     pdfopdict /y {normal_y} bind .forceput
     pdfopdict /re {normal_re} bind .forceput
-} bind executeonly def
+} bind executeonly odef
 
 /BT {
   currentdict /TextSaveMatrix known {

Modified: trunk/Master/tlpkg/tlgs/bin/gsdll32.dll
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/tlgs/bin/gsdll32.lib
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/tlgs/bin/gswin32.exe
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/tlgs/bin/gswin32c.exe
===================================================================
(Binary files differ)



More information about the tex-live-commits mailing list