<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>