<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/21715f587148e127f60a8f17387fd414a0ec47e6">https://github.com/macports/macports-ports/commit/21715f587148e127f60a8f17387fd414a0ec47e6</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 21715f5  ghostscript: add security patches for Tavis Ormandy's latest bugs in 9.25
</span>21715f5 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 21715f587148e127f60a8f17387fd414a0ec47e6
</span>Author: Perry E. Metzger <perry@piermont.com>
AuthorDate: Sun Oct 21 13:53:08 2018 -0400

<span style='display:block; white-space:pre;color:#404040;'>    ghostscript: add security patches for Tavis Ormandy's latest bugs in 9.25
</span>---
 print/ghostscript/Portfile                         |   6 +-
 .../files/patch-9.25-security_fixes-2.diff         | 988 +++++++++++++++++++++
 2 files changed, 993 insertions(+), 1 deletion(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/print/ghostscript/Portfile b/print/ghostscript/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 253dcd1..afcd1a0 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/print/ghostscript/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/print/ghostscript/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,6 +5,7 @@ PortGroup           muniversal 1.0
</span> 
 name                ghostscript
 version             9.25
<span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            1
</span> categories          print
 license             AGPL-3 BSD
 maintainers         nomaintainer
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -27,7 +28,10 @@ distfiles           ${distname}.tar.gz:source \
</span>                     ghostscript-fonts-std-8.11.tar.gz:fonts \
                     ${mappingresources_commit}.zip:misc
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles          patch-base_unix-dll.mak.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The security patch (courtesy Ken Moffat) should only be needed until
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 9.26 is released.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles          patch-base_unix-dll.mak.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-9.25-security_fixes-2.diff
</span> 
 
 checksums           ${distname}.tar.gz \
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/print/ghostscript/files/patch-9.25-security_fixes-2.diff b/print/ghostscript/files/patch-9.25-security_fixes-2.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..3bda4f7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/print/ghostscript/files/patch-9.25-security_fixes-2.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,988 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+not yet Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: 2018-10-20
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Initial Package Version: 9.25
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Upstream Status: Applied
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Origin: Upstream
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Description: Fixes another -dSAFER sandbox escape, probably in all
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+all versions still in use.  This is exploitable from e.g. gimp,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+evince, and probably from some other applications which can use
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+postscript files.  And add further updates.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Commits added (from http://git.ghostscript.com/?p=ghostpdl.git) with notes:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+7c3e7ee to help applying 34cc326
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+c76bf1c ditto
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+f8ccc7d again for help in applying 34cc326, -ve offsets in gs_init
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+a54c9e6 fix, failures in gs_fonts.ps manually fixed up, looks like
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        maybe a partial reversal of xsome earlier change
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+1778db6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+a680739
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+a5a9bf8 -ve offsets in gs_fonts.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+34cc326 -ve offsets in gs_init.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+8d19fdf -ve offsets in gs_fonts.ps, gs_init.ps, gs_setpd.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/base/gdevdflt.c ghostscript-9.25-1/base/gdevdflt.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- base/gdevdflt.c        2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ base/gdevdflt.c        2018-10-19 23:12:55.395883189 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1044,6 +1044,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 dev_param_req_t *request = (dev_param_req_t *)data;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return gx_default_get_param(pdev, request->Param, request->list);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        case gxdso_current_output_device:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                *(gx_device **)data = pdev;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return_error(gs_error_undefined);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/base/gxdevsop.h ghostscript-9.25-1/base/gxdevsop.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- base/gxdevsop.h        2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ base/gxdevsop.h        2018-10-19 23:12:55.395883189 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -327,6 +327,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     gxdso_JPEG_passthrough_data,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     gxdso_JPEG_passthrough_end,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     gxdso_supports_iccpostrender,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /* Retrieve the last device in a device chain
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       (either forwarding or subclass devices).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    gxdso_current_output_device,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* Add new gxdso_ keys above this. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     gxdso_pattern__LAST
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/psi/interp.c ghostscript-9.25-1/psi/interp.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- psi/interp.c   2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ psi/interp.c   2018-10-20 01:32:43.867083905 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -142,7 +142,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int oparray_cleanup(i_ctx_t *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int zerrorexec(i_ctx_t *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int zfinderrorobject(i_ctx_t *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static int errorexec_find(i_ctx_t *, ref *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int errorexec_pop(i_ctx_t *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int errorexec_cleanup(i_ctx_t *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int zsetstackprotect(i_ctx_t *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -662,31 +661,24 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (gs_errorname(i_ctx_p, code, &error_name) < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return code;            /* out-of-range error code! */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /*  If LockFilePermissions is true, we only refer to gserrordict, which
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-     *  is not accessible to Postcript jobs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /*  We refer to gserrordict first, which is not accessible to Postcript jobs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     *  If we're running with SAFERERRORS all the handlers are copied to gserrordict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     *  so we'll always find the default one. If not SAFERERRORS, only gs specific
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     *  errors are in gserrordict.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (i_ctx_p->LockFilePermissions) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (((dict_find_string(systemdict, "gserrordict", &perrordict) <= 0 ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              dict_find(perrordict, &error_name, &epref) <= 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            return code;            /* error name not in errordict??? */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         * For greater Adobe compatibility, only the standard PostScript errors
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         * are defined in errordict; the rest are in gserrordict.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (dict_find_string(systemdict, "errordict", &perrordict) <= 0 ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            (dict_find(perrordict, &error_name, &epref) <= 0 &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-             (dict_find_string(systemdict, "gserrordict", &perrordict) <= 0 ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              dict_find(perrordict, &error_name, &epref) <= 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            return code;            /* error name not in errordict??? */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (dict_find_string(systemdict, "gserrordict", &perrordict) <= 0 ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        (dict_find(perrordict, &error_name, &epref) <= 0 &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         (dict_find_string(systemdict, "errordict", &perrordict) <= 0 ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          dict_find(perrordict, &error_name, &epref) <= 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return code;            /* error name not in errordict??? */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     doref = *epref;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     epref = &doref;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* Push the error object on the operand stack if appropriate. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!GS_ERROR_IS_INTERRUPT(code)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        byte buf[260], *bufptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        uint rlen;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         /* Replace the error object if within an oparray or .errorexec. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         osp++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (osp >= ostop) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -695,6 +687,37 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         *osp = *perror_object;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         errorexec_find(i_ctx_p, osp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!r_has_type(osp, t_string) && !r_has_type(osp, t_name)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            code = obj_cvs(imemory, osp, buf + 2, 256, &rlen, (const byte **)&bufptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (code < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                const char *unknownstr = "--unknown--";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                rlen = strlen(unknownstr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                memcpy(buf, unknownstr, rlen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                bufptr = buf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                ref *tobj;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                bufptr[rlen] = '\0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                /* Only pass a name object if the operator doesn't exist in systemdict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                 * i.e. it's an internal operator we have hidden
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                code = dict_find_string(systemdict, (const char *)bufptr, &tobj);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if (code < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    buf[0] = buf[1] = buf[rlen + 2] = buf[rlen + 3] = '-';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    rlen += 4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    bufptr = buf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    bufptr = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (bufptr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                code = name_ref(imemory, buf, rlen, osp, 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if (code < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    make_null(osp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     goto again;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -737,7 +760,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     uint size = ref_stack_count(pstack) - skip;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     uint save_space = ialloc_space(idmemory);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int code;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int code, i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (size > 65535)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         size = 65535;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -746,6 +769,15 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (code >= 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         code = ref_stack_store(pstack, arr, size, 0, 1, true, idmemory,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                "copy_stack");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /* If we are copying the exec stack, try to replace any oparrays with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     * with the operator than references them
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (pstack == &e_stack) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        for (i = 0; i < size; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (errorexec_find(i_ctx_p, &arr->value.refs[i]) < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                make_null(&arr->value.refs[i]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ialloc_set_space(idmemory, save_space);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return code;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1910,7 +1942,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * .errorexec with errobj != null, store it in *perror_object and return 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * otherwise return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ errorexec_find(i_ctx_t *i_ctx_p, ref *perror_object)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     long i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/psi/interp.h ghostscript-9.25-1/psi/interp.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- psi/interp.h   2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ psi/interp.h   2018-10-20 01:32:43.867083905 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -91,5 +91,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Define the top-level interface to the interpreter. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int gs_interpret(i_ctx_t **pi_ctx_p, ref * pref, int user_errors,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  int *pexit_code, ref * perror_object);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++errorexec_find(i_ctx_t *i_ctx_p, ref *perror_object);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif /* interp_INCLUDED */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/psi/int.mak ghostscript-9.25-1/psi/int.mak
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- psi/int.mak    2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ psi/int.mak    2018-10-20 01:32:43.867083905 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -323,7 +323,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(PSOBJ)zcontrol.$(OBJ) : $(PSSRC)zcontrol.c $(OP) $(string__h)\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  $(estack_h) $(files_h) $(ipacked_h) $(iutil_h) $(store_h) $(stream_h)\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- $(INT_MAK) $(MAKEDIRS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ $(interp_h) $(INT_MAK) $(MAKEDIRS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(PSCC) $(PSO_)zcontrol.$(OBJ) $(C_) $(PSSRC)zcontrol.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(PSOBJ)zdict.$(OBJ) : $(PSSRC)zdict.c $(OP)\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/psi/zcontrol.c ghostscript-9.25-1/psi/zcontrol.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- psi/zcontrol.c 2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ psi/zcontrol.c 2018-10-20 01:32:43.867083905 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -24,6 +24,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "ipacked.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "iutil.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "store.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "interp.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Forward references */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int check_for_exec(const_os_ptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -787,7 +788,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Continuation operator to do the actual transfer. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* r_size(op1) was set just above. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-do_execstack(i_ctx_t *i_ctx_p, bool include_marks, os_ptr op1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++do_execstack(i_ctx_t *i_ctx_p, bool include_marks, bool include_oparrays, os_ptr op1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     os_ptr op = osp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ref *arefs = op1->value.refs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -829,6 +830,12 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   strlen(tname), (const byte *)tname);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            case t_array:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            case t_shortarray:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            case t_mixedarray:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if (!include_oparrays && errorexec_find(i_ctx_p, rq) < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    make_null(rq);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -841,14 +848,14 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     os_ptr op = osp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    return do_execstack(i_ctx_p, false, op);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return do_execstack(i_ctx_p, false, false, op);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ execstack2_continue(i_ctx_t *i_ctx_p)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     os_ptr op = osp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    return do_execstack(i_ctx_p, op->value.boolval, op - 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return do_execstack(i_ctx_p, op->value.boolval, true, op - 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* - .needinput - */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/psi/zdevice.c ghostscript-9.25-1/psi/zdevice.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- psi/zdevice.c  2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ psi/zdevice.c  2018-10-19 23:12:55.395883189 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -57,6 +57,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* - currentdevice <device> */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Returns the current device in the graphics state */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zcurrentdevice(i_ctx_t *i_ctx_p)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -71,6 +72,34 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* - .currentoutputdevice <device> */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Returns the *output* device - which will often
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   be the same as above, but not always: if a compositor
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   or other forwarding device, or subclassing device is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   in force, that will be referenced by the graphics state
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   rather than the output device.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   This is equivalent of currentdevice device, but returns
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   the *device* object, rather than the dictionary describing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   the device and device state.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++zcurrentoutputdevice(i_ctx_t *i_ctx_p)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    os_ptr op = osp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    gx_device *odev = NULL, *dev = gs_currentdevice(igs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    gs_ref_memory_t *mem = (gs_ref_memory_t *) dev->memory;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int code = dev_proc(dev, dev_spec_op)(dev,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        gxdso_current_output_device, (void *)&odev, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (code < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return code;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    push(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    make_tav(op, t_device,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             (mem == 0 ? avm_foreign : imemory_space(mem)) | a_all,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             pdevice, odev);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* <device> .devicename <string> */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zdevicename(i_ctx_t *i_ctx_p)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -614,6 +643,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {"1.copydevice2", zcopydevice2},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {"0currentdevice", zcurrentdevice},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {"0.currentoutputdevice", zcurrentoutputdevice},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {"1.devicename", zdevicename},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {"0.doneshowpage", zdoneshowpage},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {"0flushpage", zflushpage},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_diskn.ps ghostscript-9.25-1/Resource/Init/gs_diskn.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_diskn.ps      2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_diskn.ps      2018-10-20 01:34:43.827823372 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -53,7 +53,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     exch .setglobal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} .bind executeonly def % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} .bind executeonly odef % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Modify .putdevparams to force regeneration of .searchabledevs list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.putdevparams {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -61,7 +61,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   % doesn't get run enough to justify the complication
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   //.putdevparams
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   //systemdict /.searchabledevs .forceundef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} .bind odef % must be bound and hidden for .forceundef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} .bind executeonly odef % must be bound and hidden for .forceundef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % ------ extend filenameforall to handle wildcards in %dev% part of pattern -------%
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /filenameforall {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_dps1.ps ghostscript-9.25-1/Resource/Init/gs_dps1.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_dps1.ps       2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_dps1.ps       2018-10-20 01:27:39.874278223 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -21,7 +21,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % ------ Virtual memory ------ %
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /currentshared /.currentglobal load def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-/scheck /.gcheck load def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/scheck {.gcheck} bind odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ %****** FOLLOWING IS WRONG ******
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /shareddict currentdict /globaldict .knownget not { 20 dict } if def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_dps.ps ghostscript-9.25-1/Resource/Init/gs_dps.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_dps.ps        2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_dps.ps        2018-10-20 01:34:43.827823372 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -70,7 +70,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 % Save a copy of the initial gstate.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   //systemdict /savedinitialgstate gstate readonly .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   .setglobal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} .bind executeonly def % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} .bind executeonly odef % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Initialize local dictionaries and gstate when creating a new context.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Note that until this completes, we are in the anomalous situation of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -124,7 +124,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /savedinitialgstate .systemvar setgstate gsave
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 % Wrap up.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   end .setglobal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Check whether an object is a procedure.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.proccheck {                     % <obj> .proccheck <bool>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_epsf.ps ghostscript-9.25-1/Resource/Init/gs_epsf.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_epsf.ps       2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_epsf.ps       2018-10-20 01:34:43.827823372 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -31,7 +31,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /EPSBoundingBoxState 5 def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /EPSBoundingBoxSetState {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   //systemdict /EPSBoundingBoxState 3 -1 roll .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} .bind odef % .forceput must be bound and hidden
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} .bind executeonly odef % .forceput must be bound and hidden
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Parse 4 numbers for a bounding box
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /EPSBoundingBoxParse { % (llx lly urx ury) -- llx lly urx ury true OR false
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_fntem.ps ghostscript-9.25-1/Resource/Init/gs_fntem.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_fntem.ps      2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_fntem.ps      2018-10-19 23:32:36.960622205 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -408,7 +408,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     exit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } loop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   exch setglobal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} .bind executeonly def % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} .bind executeonly odef % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ currentdict end /ProcSet defineresource pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_fonts.ps ghostscript-9.25-1/Resource/Init/gs_fonts.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_fonts.ps      2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_fonts.ps      2018-10-20 01:34:43.827823372 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -373,7 +373,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % and the access path.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.setnativefontmapbuilt { % set whether we've been run
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   systemdict exch /.nativefontmapbuilt exch .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} .bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} .bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ systemdict /NONATIVEFONTMAP known .setnativefontmapbuilt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.buildnativefontmap {   % - .buildnativefontmap <bool>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   systemdict /.nativefontmapbuilt .knownget not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -578,7 +578,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } bind def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.setloadingfont {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    //systemdict /.loadingfont 3 -1 roll .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} .bind odef % .forceput must be bound and hidden
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} .bind executeonly odef % .forceput must be bound and hidden
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.loadfont
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  {              % Some buggy fonts leave extra junk on the stack,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 % so we have to make a closure that records the stack depth
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1007,7 +1007,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     dup length string copy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     .forceput setglobal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} .bind odef % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} .bind executeonly odef % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Attempt to load a font from a file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.tryloadfont {         % <fontname> .tryloadfont <font> true
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1098,7 +1098,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 % Check to make sure the font was actually loaded.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         dup 3 index .fontknownget
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         { dup /PathLoad 4 index //.putgstringcopy exec
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         { dup /PathLoad 4 index .putgstringcopy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            4 1 roll pop pop pop //true exit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1110,7 +1110,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          {            % Stack: origfontname fontdirectory path filefontname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            2 index 1 index .fontknownget
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             {   % Yes.  Stack: origfontname fontdirectory path filefontname fontdict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              dup 4 -1 roll /PathLoad exch //.putgstringcopy exec
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              dup 4 -1 roll /PathLoad exch .putgstringcopy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                       % Stack: origfontname fontdirectory filefontname fontdict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               3 -1 roll pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                       % Stack: origfontname filefontname fontdict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1143,7 +1143,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } loop              % end of loop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- } bind executeonly def % must be bound and hidden for .putgstringcopy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } bind executeonly odef % must be bound and hidden for .putgstringcopy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ currentdict /.putgstringcopy .undef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_init.ps ghostscript-9.25-1/Resource/Init/gs_init.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_init.ps       2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_init.ps       2018-10-20 01:34:43.828823362 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -188,6 +188,16 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   currentdict /PARANOIDSAFER known or     % PARANOIDSAFER is equivalent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ifelse def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/SAFERERRORS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++currentdict /NOSAFERERRORS known
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  //false
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  currentdict /SAFERERRORS known
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} ifelse def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ currentdict /SHORTERRORS known   /SHORTERRORS exch def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ currentdict /TTYPAUSE known   /TTYPAUSE exch def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ currentdict /WRITESYSTEMDICT known   /WRITESYSTEMDICT exch def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -831,12 +841,26 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.runstring {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   0 0 .systemvmstring .systemvmSFD cvx { .runexec } execute0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } bind def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Define the procedure that the C code uses to set up for executing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % a string that may be received in pieces.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++%
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++% Immediate evaluation doesn't work on operators (like .needinput)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++% so calling .runstringbegin will throw an undefined error if we
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++% undefined .needinput so it cannot be accessed outside the init
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++% code. But, we can store the operator in an array, use immediate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++% evaluation on the array to get the operator, then undefined the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++% array (and because they are both of the same name, the operator
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++% get undefined too).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++% This prevents random Postscript from erroneously calling .needinput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++% and forcing the interpreter into an invalid state.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/.needinput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++1 .systemvmarray dup 0 /.needinput load put
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.runstringbegin {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  1 .systemvmarray dup 0 /.needinput load put cvx % { .needinput } in systemvm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  1 .systemvmarray dup 0 //.needinput 0 get put cvx       % { .needinput } in systemvm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   0 0 .systemvmstring .systemvmSFD cvx .runexec
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Define a special version of runlibfile that aborts on errors.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /runlibfile0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1123,12 +1147,23 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  } bind def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ end               % errordict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-% Put all the default handlers in gserrordict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-gserrordict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-errordict {2 index 3 1 roll put} forall
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-noaccess pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-% remove the non-standard errors from errordict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++gserrordict /unknownerror errordict /unknownerror get put
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ errordict /unknownerror .undef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/.SAFERERRORLIST ErrorNames def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/.setsafererrors
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++% Put all the requested handlers in gserrordict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  gserrordict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  //.SAFERERRORLIST
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  {dup errordict exch get 2 index 3 1 roll put} forall
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  noaccess pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  systemdict /.setsafeerrors .forceundef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  systemdict /.SAFERERRORLIST .forceundef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++SAFERERRORS {.setsafererrors} if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Define a stable private copy of handleerror that we will always use under
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % JOBSERVER mode.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.GShandleerror errordict /handleerror get def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1760,18 +1795,15 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Bind all the operators defined as procedures.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.bindoperators           % binds operators in currentdict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- { % Temporarily disable the typecheck error.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   errordict /typecheck 2 copy get
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   errordict /typecheck { pop } put       % pop the command
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    currentdict
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     { dup type /operatortype eq
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       { % This might be a real operator, so bind might cause a typecheck,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         % but we've made the error a no-op temporarily.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         .bind
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         % This might be a real operator, so bind might cause a typecheck
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         {.bind} .internalstopped pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       if pop pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } forall
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   put
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  } def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ DELAYBIND not { .bindoperators } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2173,7 +2205,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   %% but can be easily restored (just delete the name from the list in the array). In future
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   %% we may remove the operator and the code implementation entirely.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  /.bitadd /.charboxpath /.cond /.countexecstack /.execstack /.runandhide /.popdevicefilter
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /.bitadd /.charboxpath /.cond /.runandhide /.popdevicefilter
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /.execfile /.filenamesplit /.file_name_parent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /.setdefaultmatrix /.isprocfilter /.unread /.psstringencode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /.buildsampledfunction /.isencapfunction /.currentaccuratecurves /.currentcurvejoin /.currentdashadapt /.currentdotlength
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2211,7 +2243,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /.shfill /.argindex /.bytestring /.namestring /.stringbreak /.stringmatch /.globalvmarray /.globalvmdict /.globalvmpackedarray /.globalvmstring
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /.localvmarray /.localvmdict /.localvmpackedarray /.localvmstring /.systemvmarray /.systemvmdict /.systemvmpackedarray /.systemvmstring /.systemvmfile /.systemvmlibfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /.systemvmSFD /.settrapparams /.currentsystemparams /.currentuserparams /.getsystemparam /.getuserparam /.setsystemparams /.setuserparams
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  /.checkpassword /.locale_to_utf8 /.currentglobal /.gcheck /.imagepath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /.checkpassword /.locale_to_utf8 /.currentglobal /.gcheck /.imagepath /.currentoutputdevice
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /.type /.writecvs /.setSMask /.currentSMask /.needinput /.countexecstack /.execstack /.applypolicies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   % Used by a free user in the Library of Congress. Apparently this is used to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   % draw a partial page, which is then filled in by the results of a barcode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2230,7 +2263,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   % test files/utilities, or engineers expressed a desire to keep them visible.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   %
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   %/currentdevice /.sort /.buildfont0 /.buildfont1 /.buildfont2 /.buildfont3 /.buildfont4 /.buildfont9 /.buildfont10 /.buildfont11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  %/.buildfotn32 /.buildfont42 /.type9mapcid /.type11mapcid /.swapcolors
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  %/.buildfont32 /.buildfont42 /.type9mapcid /.type11mapcid /.swapcolors
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   %/currentdevice  /.quit /.setuseciecolor /.needinput /.setoverprintmode /.special_op /.dicttomark /.knownget
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   %/.FAPIavailable /.FAPIpassfont /.FAPIrebuildfont /.FAPIBuildGlyph /.FAPIBuildChar /.FAPIBuildGlyph9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   %/.tempfile /.numicc_components /.set_outputintent  /.max /.min /.vmreclaim /.getpath /.setglobal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_lev2.ps ghostscript-9.25-1/Resource/Init/gs_lev2.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_lev2.ps       2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_lev2.ps       2018-10-19 23:32:36.960622205 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -163,10 +163,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         % Set them again to the new values.  From here on, we are safe,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         % since a context switch will consult userparams.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   .setuserparams
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} .bind executeonly def % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} .bind executeonly odef % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /setuserparams {          % <dict> setuserparams -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    .setuserparams2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {.setuserparams2} stopped
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {/setuserparams load $error /errorname get signalerror} if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } .bind odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Initialize user parameters managed here.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /JobName () .definepsuserparam
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -415,7 +416,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % VMReclaim and VMThreshold are user parameters.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /setvmthreshold {         % <int> setvmthreshold -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  mark /VMThreshold 2 .argindex .dicttomark .setuserparams2 pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  mark /VMThreshold 2 .argindex .dicttomark {.setuserparams2} stopped
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  {pop /setvmthreshold load $error /errorname get signalerror}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  {pop} ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /vmreclaim {                      % <int> vmreclaim -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   dup 0 gt {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -427,7 +430,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     % VMReclaim userparam controls enable/disable GC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    mark /VMReclaim 2 index .dicttomark .setuserparams2 pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    mark /VMReclaim 2 index .dicttomark {.setuserparams2} stopped
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {pop /vmreclaim load $error /errorname get signalerror}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {pop} ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -1 setvmthreshold
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_pdfwr.ps ghostscript-9.25-1/Resource/Init/gs_pdfwr.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_pdfwr.ps      2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_pdfwr.ps      2018-10-19 23:32:36.960622205 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -660,7 +660,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} .bind executeonly def % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} .bind executeonly odef % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Use the DSC processing hook to pass DSC comments to the driver.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % We use a pseudo-parameter named DSC whose value is an array:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_resmp.ps ghostscript-9.25-1/Resource/Init/gs_resmp.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_resmp.ps      2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_resmp.ps      2018-10-20 01:32:43.867083905 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -183,7 +183,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   % We don't check them.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   currentglobal //false setglobal                  % <object> bGlobal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  countexecstack array execstack                   % <object> bGlobal [execstack]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  //false .countexecstack array //false .execstack % <object> bGlobal [execstack]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   dup //null exch                                  % <object> bGlobal [execstack] null [execstack]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   length 3 sub -1 0 {                              % <object> bGlobal [execstack] null i
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     2 index exch get                               % <object> bGlobal [execstack] null proc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_setpd.ps ghostscript-9.25-1/Resource/Init/gs_setpd.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_setpd.ps      2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_setpd.ps      2018-10-20 01:34:43.828823362 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -608,59 +608,72 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % in the <failed> dictionary with the policy value,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % and we replace the key in the <merged> dictionary with its prior value
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % (or remove it if it had no prior value).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-/.policyprocs mark
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % These procedures are called with the following on the stack:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ %   <orig> <merged> <failed> <Policies> <key> <policy>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % They are expected to consume the top 2 operands.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % NOTE: we currently treat all values other than 0, 1, or 7 (for PageSize)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % the same as 0, i.e., we signal an error.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-%
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-% M. Sweet, Easy Software Products:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-%
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-% Define NOMEDIAATTRS to turn off the default (but unimplementable) media
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-% selection policies for setpagedevice.  This is used by CUPS to support
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-% the standard Adobe media attributes.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  0 {             % Set errorinfo and signal a configurationerror.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      NOMEDIAATTRS {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        % NOMEDIAATTRS means that the default policy is 7...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        pop 2 index exch 7 put
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        pop dup 4 index exch get 2 array astore
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        $error /errorinfo 3 -1 roll put
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        cleartomark
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        /setpagedevice .systemvar /configurationerror signalerror
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  } bind
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  1 {             % Roll back the failed request to its previous status.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-SETPDDEBUG { (Rolling back.) = pstack flush } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        3 index 2 index 3 -1 roll .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        4 index 1 index .knownget
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         { 4 index 3 1 roll .forceput }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         { 3 index exch .undef }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  } .bind executeonly % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  7 {             % For PageSize only, just impose the request.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        1 index /PageSize eq
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         { pop pop 1 index /PageSize 7 put }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         { .policyprocs 0 get exec }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  } bind
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-.dicttomark readonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/0Policy {                % Set errorinfo and signal a configurationerror.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  NOMEDIAATTRS {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    % NOMEDIAATTRS means that the default policy is 7...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    pop 2 index exch 7 put
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    pop dup 4 index exch get 2 array astore
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    $error /errorinfo 3 -1 roll put
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    cleartomark
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /setpagedevice .systemvar /configurationerror signalerror
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++% Making this an operator means we can properly hide
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++% the contents - specifically .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/1Policy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  % Roll back the failed request to its previous status.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  SETPDDEBUG { (Rolling back.) = pstack flush } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  3 index 2 index 3 -1 roll .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  4 index 1 index .knownget
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  { 4 index 3 1 roll .forceput }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  { 3 index exch .undef }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/7Policy {                % For PageSize only, just impose the request.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  1 index /PageSize eq
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  { pop pop 1 index /PageSize 7 put }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  { .policyprocs 0 get exec }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.applypolicies           % <orig> <merged> <failed> .applypolicies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         %   <orig> <merged'> <failed'>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- { 1 index /Policies get 1 index
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { type /integertype eq
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       { pop              % already processed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       { 2 copy .knownget not { 1 index /PolicyNotFound get } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                        % Stack: <orig> <merged> <failed> <Policies> <key>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                        %   <policy>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         .policyprocs 1 index .knownget not { .policyprocs 0 get } if exec
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   forall pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- } bind def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  1 index /Policies get 1 index
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  { type /integertype eq
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       pop                % already processed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     }{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       2 copy .knownget not { 1 index /PolicyNotFound get } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      % Stack: <orig> <merged> <failed> <Policies> <key>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      %   <policy>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        dup 1 eq {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          1Policy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          dup 7 eq {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            7Policy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          }{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            0Policy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  forall pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++currentdict /0Policy undef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++currentdict /1Policy undef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++currentdict /7Policy undef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Prepare to present parameters to the device, by spreading them onto the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % operand stack and removing any that shouldn't be presented.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -877,7 +890,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 % Stack: mark <orig> <request> <merged> <failed>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SETPDDEBUG { (Constructing.) = pstack flush } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   currentdevice .devicename 2 index /OutputDevice get eq
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   % Non-obvious: we need to check the name of the output device, to tell
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   % whether we're going to have to replace the entire device chain (which
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   % may be only one device, or may be multiple devices.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   % If we're not replacing the entire change, we have to use the device in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   % the graphics state, so the configuration of the entire device chain is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   % correctly set.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   .currentoutputdevice .devicename 2 index /OutputDevice get eq
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     { currentdevice }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     { 1 index /OutputDevice get finddevice }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -997,7 +1016,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     .postinstall
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   setglobal           % return to original VM allocation mode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % We break out the code after calling the Install procedure into a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % separate procedure, since it is executed even if Install causes an error.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_typ32.ps ghostscript-9.25-1/Resource/Init/gs_typ32.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_typ32.ps      2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_typ32.ps      2018-10-19 23:32:36.960622205 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -79,15 +79,19 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .dicttomark /ProcSet defineresource pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.cidfonttypes where { pop } { /.cidfonttypes 6 dict def } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-.cidfonttypes begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-4 % CIDFontType 4 = FontType 32
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-{ dup /FontType 32 .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/CIDFontType4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  dup /FontType 32 .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   dup /CharStrings 20 dict .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   1 index exch .buildfont32 exch pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} .bind executeonly def % must be bound and hidden for .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} .bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++.cidfonttypes begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++4 /CIDFontType4 load def % CIDFontType 4 = FontType 32
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ end               % .cidfonttypes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++currentdict /CIDFontType4 .forceundef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Define the BuildGlyph procedure.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Since Type 32 fonts are indexed by CID, there is no BuildChar procedure.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/gs_type1.ps ghostscript-9.25-1/Resource/Init/gs_type1.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/gs_type1.ps      2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/gs_type1.ps      2018-10-19 23:32:36.961622195 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -283,7 +283,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   2 copy /WeightVector exch .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   .setweightvector
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} .bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} .bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ end
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Register the font types for definefont.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/pdf_base.ps ghostscript-9.25-1/Resource/Init/pdf_base.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/pdf_base.ps      2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/pdf_base.ps      2018-10-19 23:32:36.961622195 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -218,7 +218,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /PDFScanRules_true << /PDFScanRules //true >> def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /PDFScanRules_null << /PDFScanRules //null >> def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.pdfrun {                        % <file> <opdict> .pdfrun -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/pdf_draw.ps ghostscript-9.25-1/Resource/Init/pdf_draw.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/pdf_draw.ps      2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/pdf_draw.ps      2018-10-19 23:32:36.961622195 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1158,7 +1158,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Q
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   PDFDEBUG { pdfdict /PDFSTEPcount .knownget { 1 le } { //true } ifelse { (%End PaintProc) print dup === flush } if } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   PDFfile exch setfileposition
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.pdfpaintproc {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     %% Get the /m from pdfopdict (must be present)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1189,7 +1189,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       switch_to_text_marking_ops
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-}bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /resolvepattern { % <patternstreamdict> resolvepattern <patterndict>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 % Don't do the resolvestream now: just capture the data
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2353,7 +2353,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pdfdict /AppearanceNumber 0 .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-}bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /MakeAppearanceName {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   pdfdict /AppearanceNumber get
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2382,7 +2382,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   DoForm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   pdfdict /.PreservePDFForm 3 -1 roll .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   grestore
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /DoForm {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   %% save the current value, if its true we will set it to false later, in order
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2541,7 +2541,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     end
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   pdfdict /.PreservePDFForm 3 -1 roll .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /_dops_save 1 array def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/pdf_font.ps ghostscript-9.25-1/Resource/Init/pdf_font.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/pdf_font.ps      2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/pdf_font.ps      2018-10-19 23:32:36.961622195 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -718,7 +718,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   {pop pop pop}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ currentdict /.DoToUnicode? .forceundef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1241,7 +1241,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } bdef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     dup currentdict Encoding .processToUnicode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     currentdict end .completefont exch pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.adjustcharwidth {       % <wx> <wy> .adjustcharwidth <wx'> <wy'>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   % Enforce the metrics, in glyph space, to the values found in the PDF Font object
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   % - force wy == 0 (assumed, and not stored in the PDF font)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2026,7 +2026,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /findresource cvx /undefined signalerror
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } loop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /buildCIDType0 {  % <CIDFontType0-font-resource> buildCIDType0 <font>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   dup /BaseFont get findCIDFont exch pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2211,7 +2211,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /Type0 //buildType0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /Type1 //buildType1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /MMType1 //buildType1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  /Type3 //buildType3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /Type3 /buildType3 load
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /TrueType //buildTrueType
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /CIDFontType0 //buildCIDType0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /CIDFontType2 //buildCIDType2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/pdf_main.ps ghostscript-9.25-1/Resource/Init/pdf_main.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/pdf_main.ps      2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/pdf_main.ps      2018-10-19 23:32:36.961622195 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -660,7 +660,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } forall
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ currentdict /pdf_collection_files .undef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2715,7 +2715,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   .setglobal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /RepairedAnError exch def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /Repaired exch def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Display the contents of a page (including annotations).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /showpagecontents {       % <pagedict> showpagecontents -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ghostscript-9.25/Resource/Init/pdf_ops.ps ghostscript-9.25-1/Resource/Init/pdf_ops.ps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- Resource/Init/pdf_ops.ps       2018-09-13 11:02:01.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ Resource/Init/pdf_ops.ps       2018-10-19 23:32:36.962622184 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -193,7 +193,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       pdfformaterror
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } ifelse
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ % Save PDF gstate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /qstate {       % - qstate <qstate>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -451,7 +451,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   %% a gsave, so we haven't copied it to /self, if we don't do that here
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   %% then transparent annotations cause an invalid access error.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   currentdict //nodict eq {/self dup load end 5 dict begin def} if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /AIS { .setalphaisshape } bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /BM {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /.setblendmode where {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1077,7 +1077,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pdfopdict /v {inside_text_v} bind .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pdfopdict /y {inside_text_y} bind .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pdfopdict /re {inside_text_re} bind .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /switch_to_normal_marking_ops {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pdfopdict /m {normal_m} bind .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1086,7 +1086,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pdfopdict /v {normal_v} bind .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pdfopdict /y {normal_y} bind .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pdfopdict /re {normal_re} bind .forceput
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} bind executeonly def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} bind executeonly odef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /BT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   currentdict /TextSaveMatrix known {
</span></pre><pre style='margin:0'>

</pre>