Date: Thursday, September 13, 2018 @ 16:49:50 Author: andyrtr Revision: 334468
upgpkg: ghostscript 9.25-1 upstream update 9.25 Modified: ghostscript/trunk/PKGBUILD Deleted: ghostscript/trunk/0001_ICC_profile_validation.patch ghostscript/trunk/0002_retain_LockSafetyParams_through_failed_installpagedevice.patch ghostscript/trunk/0003_Fix_SEGV_seen_in_all-devices_test.patch ghostscript/trunk/0004_Add_the_ICCProfilesDir_to_the_PermitReading_list.patch ghostscript/trunk/0005_add_wildcards_to_the_permissions_paths.patch ghostscript/trunk/0006_stack_size_space_fix.patch ---------------------------------------------------------------------+ 0001_ICC_profile_validation.patch | 80 --- 0002_retain_LockSafetyParams_through_failed_installpagedevice.patch | 69 -- 0003_Fix_SEGV_seen_in_all-devices_test.patch | 40 - 0004_Add_the_ICCProfilesDir_to_the_PermitReading_list.patch | 43 - 0005_add_wildcards_to_the_permissions_paths.patch | 55 -- 0006_stack_size_space_fix.patch | 254 ---------- PKGBUILD | 33 - 7 files changed, 4 insertions(+), 570 deletions(-) Deleted: 0001_ICC_profile_validation.patch =================================================================== --- 0001_ICC_profile_validation.patch 2018-09-13 16:37:58 UTC (rev 334467) +++ 0001_ICC_profile_validation.patch 2018-09-13 16:49:50 UTC (rev 334468) @@ -1,80 +0,0 @@ -From bc3df0773fccf4b4906a3e59652ad646ea0fee91 Mon Sep 17 00:00:00 2001 -From: Chris Liddell <chris.lidd...@artifex.com> -Date: Tue, 4 Sep 2018 17:01:08 +0100 -Subject: [PATCH] For ICC profile validation, have cups id iteself as DeviceN - -Give the range of color spaces and models that cups supports, we can't -reasonably provide (or expect others to provide) output ICC profiles for all -cases. - -For the purpose of profile validation, have it claim to be DeviceN and benefit -from the extra tolerance in profiles allowed for that class of device. ---- - cups/gdevcups.c | 15 ++++++++++++++- - devices/devs.mak | 2 +- - 2 files changed, 15 insertions(+), 2 deletions(-) - -diff --git a/cups/gdevcups.c b/cups/gdevcups.c -index c1574f8..decd8eb 100644 ---- a/cups/gdevcups.c -+++ b/cups/gdevcups.c -@@ -70,6 +70,7 @@ - #include "std.h" /* to stop stdlib.h redefining types */ - #include "gdevprn.h" - #include "gsparam.h" -+#include "gxdevsop.h" - #include "arch.h" - #include "gsicc_manage.h" - -@@ -252,6 +253,7 @@ private int cups_put_params(gx_device *, gs_param_list *); - private int cups_set_color_info(gx_device *); - private dev_proc_sync_output(cups_sync_output); - private prn_dev_proc_get_space_params(cups_get_space_params); -+private int cups_spec_op(gx_device *dev_, int op, void *data, int datasize); - - #ifdef dev_t_proc_encode_color - private cm_map_proc_gray(cups_map_gray); -@@ -392,7 +394,7 @@ private gx_device_procs cups_procs = - NULL, /* push_transparency_state */ - NULL, /* pop_transparency_state */ - NULL, /* put_image */ -- -+ cups_spec_op - }; - - #define prn_device_body_copies(dtype, procs, dname, w10, h10, xdpi, ydpi, lo, to, lm, bm, rm, tm, ncomp, depth, mg, mc, dg, dc, print_pages)\ -@@ -5927,6 +5929,17 @@ cups_print_planar(gx_device_printer *pdev, - return (0); - } - -+private int -+cups_spec_op(gx_device *dev_, int op, void *data, int datasize) -+{ -+ /* Although not strictly DeviceN, the range of color models -+ this device supports presets similar issues. -+ */ -+ if (op == gxdso_supports_devn) { -+ return true; -+ } -+ return gx_default_dev_spec_op(dev_, op, data, datasize); -+} - - /* - */ -diff --git a/devices/devs.mak b/devices/devs.mak -index c85604c..e8654e5 100644 ---- a/devices/devs.mak -+++ b/devices/devs.mak -@@ -1860,7 +1860,7 @@ $(DD)pwgraster.dev : $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) \ - $(ADDMOD) $(DD)pwgraster -include $(lcups_dev) - $(ADDMOD) $(DD)pwgraster -include $(lcupsi_dev) - --$(DEVOBJ)gdevcups.$(OBJ) : $(LCUPSSRCDIR)$(D)gdevcups.c $(std_h) $(DEVS_MAK) $(MAKEDIRS) -+$(DEVOBJ)gdevcups.$(OBJ) : $(LCUPSSRCDIR)$(D)gdevcups.c $(std_h) $(gxdevsop_h) $(DEVS_MAK) $(MAKEDIRS) - $(CUPS_CC) $(DEVO_)gdevcups.$(OBJ) $(C_) $(CFLAGS) $(CUPSCFLAGS) \ - $(I_)$(GLSRC) \ - $(I_)$(DEVSRC) \ --- -2.9.1 - - Deleted: 0002_retain_LockSafetyParams_through_failed_installpagedevice.patch =================================================================== --- 0002_retain_LockSafetyParams_through_failed_installpagedevice.patch 2018-09-13 16:37:58 UTC (rev 334467) +++ 0002_retain_LockSafetyParams_through_failed_installpagedevice.patch 2018-09-13 16:49:50 UTC (rev 334468) @@ -1,69 +0,0 @@ -From 5812b1b78fc4d36fdc293b7859de69241140d590 Mon Sep 17 00:00:00 2001 -From: Chris Liddell <chris.lidd...@artifex.com> -Date: Tue, 4 Sep 2018 23:18:46 +0100 -Subject: [PATCH] Bug 699714: retain .LockSafetyParams through failed - .installpagedevice - -In the event that the .trysetparams fails during .installpagedevice, catch the -error, and ensure that at least the .LockSafetyParams is set. ---- - Resource/Init/gs_setpd.ps | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - -diff --git a/Resource/Init/gs_setpd.ps b/Resource/Init/gs_setpd.ps -index bba3c8c..aee9614 100644 ---- a/Resource/Init/gs_setpd.ps -+++ b/Resource/Init/gs_setpd.ps -@@ -95,12 +95,19 @@ level2dict begin - { % Since setpagedevice doesn't create new device objects, - % we must (carefully) reinstall the old parameters in - % the same device. -- .currentpagedevice pop //null currentdevice //null .trysetparams -+ .currentpagedevice pop //null currentdevice //null -+ {.trysetparams} .internalstopped -+ { -+ //null -+ } if - dup type /booleantype eq - { pop pop } -- { % This should never happen! -+ { - SETPDDEBUG { (Error in .trysetparams!) = pstack flush } if - cleartomark pop pop pop -+ % if resetting the entire device state failed, at least put back the se -+ currentdevice //null //false mark /.LockSafetyParams .currentpagedevice pop -+ /.LockSafetyParams .knownget not {//false} if .putdeviceparamsonly - /.installpagedevice cvx /rangecheck signalerror - } - ifelse pop pop --- -2.9.1 - - -From e914f1da46e33decc534486598dc3eadf69e6efb Mon Sep 17 00:00:00 2001 -From: Chris Liddell <chris.lidd...@artifex.com> -Date: Wed, 5 Sep 2018 08:44:41 +0100 -Subject: [PATCH] Fix incomplete comment from previous commit - ---- - Resource/Init/gs_setpd.ps | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/Resource/Init/gs_setpd.ps b/Resource/Init/gs_setpd.ps -index aee9614..b75c431 100644 ---- a/Resource/Init/gs_setpd.ps -+++ b/Resource/Init/gs_setpd.ps -@@ -105,7 +105,8 @@ level2dict begin - { - SETPDDEBUG { (Error in .trysetparams!) = pstack flush } if - cleartomark pop pop pop -- % if resetting the entire device state failed, at least put back the se -+ % if resetting the entire device state failed, at least put back the -+ % security related key - currentdevice //null //false mark /.LockSafetyParams .currentpagedevice pop - /.LockSafetyParams .knownget not {//false} if .putdeviceparamsonly - /.installpagedevice cvx /rangecheck signalerror --- -2.9.1 - - Deleted: 0003_Fix_SEGV_seen_in_all-devices_test.patch =================================================================== --- 0003_Fix_SEGV_seen_in_all-devices_test.patch 2018-09-13 16:37:58 UTC (rev 334467) +++ 0003_Fix_SEGV_seen_in_all-devices_test.patch 2018-09-13 16:49:50 UTC (rev 334468) @@ -1,40 +0,0 @@ -From 68eca5e94e6f63f4392b15581ad41af52e0edfd9 Mon Sep 17 00:00:00 2001 -From: Robin Watts <robin.wa...@artifex.com> -Date: Thu, 6 Sep 2018 12:56:51 +0100 -Subject: [PATCH] Fix SEGV seen in all-devices test with plank - examples/ridt91.eps - -Silly typo in the contone fill code for the landscape flippedy -color cache case. ---- - base/gximono.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/base/gximono.c b/base/gximono.c -index 2971f40..276db69 100644 ---- a/base/gximono.c -+++ b/base/gximono.c -@@ -1222,8 +1222,8 @@ image_render_mono_ht(gx_image_enum * penum_orig, const byte * buffer, int data_x - dev_value = &(color_cache[*psrc * spp_out]); - for (j = 0; j < spp_out; j++) { - *(devc_contone[j] + position) = dev_value[j]; -- position -= LAND_BITS; - } -+ position -= LAND_BITS; - xr--; - } /* at loop exit xn will be <= xr */ - psrc++; -@@ -1259,8 +1259,8 @@ image_render_mono_ht(gx_image_enum * penum_orig, const byte * buffer, int data_x - dev_value = &(color_cache[*psrc * spp_out]); - for (j = 0; j < spp_out; j++) { - *(devc_contone[j] + position) = dev_value[j]; -- devc_contone[j] += LAND_BITS; - } -+ position += LAND_BITS; - xr++; - } /* at loop exit xn will be >= xr */ - psrc++; --- -2.9.1 - - Deleted: 0004_Add_the_ICCProfilesDir_to_the_PermitReading_list.patch =================================================================== --- 0004_Add_the_ICCProfilesDir_to_the_PermitReading_list.patch 2018-09-13 16:37:58 UTC (rev 334467) +++ 0004_Add_the_ICCProfilesDir_to_the_PermitReading_list.patch 2018-09-13 16:49:50 UTC (rev 334468) @@ -1,43 +0,0 @@ -From c8c01f8c4164bc10281d9e8f87cf96314d93104b Mon Sep 17 00:00:00 2001 -From: Chris Liddell <chris.lidd...@artifex.com> -Date: Thu, 6 Sep 2018 14:08:41 +0100 -Subject: [PATCH] Bug 699722: Add the ICCProfilesDir to the PermitReading list - -There was also an issue that the string being returned from the graphics -library was null terminated, and Postscript strings are not (and Ghostscript -strings are not necessarily). We leave the null termination in place, but -reduce the length returned by 1. ---- - Resource/Init/gs_init.ps | 1 + - base/gsicc_manage.c | 2 +- - 2 files changed, 2 insertions(+), 1 deletion(-) - -diff --git a/Resource/Init/gs_init.ps b/Resource/Init/gs_init.ps -index bc8b795..83918a9 100644 ---- a/Resource/Init/gs_init.ps -+++ b/Resource/Init/gs_init.ps -@@ -2049,6 +2049,7 @@ readonly def - [ currentsystemparams /GenericResourceDir get] (*) .file_name_separator (*) - concatstrings concatstrings .generate_dir_list_templates - } if -+ currentuserparams /ICCProfilesDir known {currentuserparams /ICCProfilesDir get} if - ] - /PermitFileWriting [ - currentuserparams /PermitFileWriting get aload pop -diff --git a/base/gsicc_manage.c b/base/gsicc_manage.c -index 69f05c4..ff685e7 100644 ---- a/base/gsicc_manage.c -+++ b/base/gsicc_manage.c -@@ -2972,7 +2972,7 @@ gs_currenticcdirectory(const gs_gstate * pgs, gs_param_string * pval) - pval->persistent = true; - } else { - pval->data = (const byte *)(lib_ctx->profiledir); -- pval->size = lib_ctx->profiledir_len; -+ pval->size = lib_ctx->profiledir_len - 1; - pval->persistent = false; - } - } --- -2.9.1 - - Deleted: 0005_add_wildcards_to_the_permissions_paths.patch =================================================================== --- 0005_add_wildcards_to_the_permissions_paths.patch 2018-09-13 16:37:58 UTC (rev 334467) +++ 0005_add_wildcards_to_the_permissions_paths.patch 2018-09-13 16:49:50 UTC (rev 334468) @@ -1,55 +0,0 @@ -From 13418541a5ae19b15f51cbb87faf344902f5af98 Mon Sep 17 00:00:00 2001 -From: Chris Liddell <chris.lidd...@artifex.com> -Date: Thu, 6 Sep 2018 18:40:05 +0100 -Subject: [PATCH] Bug 699722 (2): add wildcards to the permissions paths. - -The temp and ICC profile paths need to finish with wildcards to work correctly. ---- - Resource/Init/gs_init.ps | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/Resource/Init/gs_init.ps b/Resource/Init/gs_init.ps -index 83918a9..5ff9f63 100644 ---- a/Resource/Init/gs_init.ps -+++ b/Resource/Init/gs_init.ps -@@ -2034,7 +2034,7 @@ readonly def - << - /PermitFileReading [ - currentuserparams /PermitFileReading get aload pop -- //tempfilepaths aload pop -+ [//tempfilepaths aload pop] (*) .generate_dir_list_templates - /FONTPATH .systemvar (*) .generate_dir_list_templates - % Library files : - /LIBPATH .systemvar (*) .generate_dir_list_templates -@@ -2049,15 +2049,15 @@ readonly def - [ currentsystemparams /GenericResourceDir get] (*) .file_name_separator (*) - concatstrings concatstrings .generate_dir_list_templates - } if -- currentuserparams /ICCProfilesDir known {currentuserparams /ICCProfilesDir get} if -+ currentuserparams /ICCProfilesDir known {[currentuserparams /ICCProfilesDir get] (*) .generate_dir_list_templates} if - ] - /PermitFileWriting [ - currentuserparams /PermitFileWriting get aload pop -- //tempfilepaths aload pop -+ [//tempfilepaths aload pop] (*) .generate_dir_list_templates - ] - /PermitFileControl [ - currentuserparams /PermitFileControl get aload pop -- //tempfilepaths aload pop -+ [//tempfilepaths aload pop] (*) .generate_dir_list_templates - ] - /LockFilePermissions //true - >> setuserparams -@@ -2140,7 +2140,7 @@ SAFER { .setsafeglobal } if - /.setshapealpha % transparency-example.ps - /.endtransparencygroup % transparency-example.ps - /.setdotlength % Bug687720.ps -- /.sort /.setdebug /.mementolistnewblocks /getenv -+ /.sort /.mementolistnewblocks /getenv - - /.makeoperator /.setCPSImode % gs_cet.ps, this won't work on cluster with -dSAFER - --- -2.9.1 - - Deleted: 0006_stack_size_space_fix.patch =================================================================== --- 0006_stack_size_space_fix.patch 2018-09-13 16:37:58 UTC (rev 334467) +++ 0006_stack_size_space_fix.patch 2018-09-13 16:49:50 UTC (rev 334468) @@ -1,254 +0,0 @@ -From 3e5d316b72e3965b7968bb1d96baa137cd063ac6 Mon Sep 17 00:00:00 2001 -From: Chris Liddell <chris.lidd...@artifex.com> -Date: Wed, 5 Sep 2018 17:14:59 +0100 -Subject: [PATCH] Bug 699718: Ensure stack space is available before gsrestore - call out - -During a grestore, if the device is going to change, we call out to Postscript -to restore the device configuration, before returning to restore the graphics -state internally. - -We have to ensure sufficient op stack space is available to complete the -operation, otherwise the device can end up an undefined state. ---- - Resource/Init/gs_setpd.ps | 20 +++++++++++------ - psi/zdevice2.c | 55 ++++++++++++++++++++++++++++++++++++----------- - 2 files changed, 56 insertions(+), 19 deletions(-) - -diff --git a/Resource/Init/gs_setpd.ps b/Resource/Init/gs_setpd.ps -index b75c431..8fa7c51 100644 ---- a/Resource/Init/gs_setpd.ps -+++ b/Resource/Init/gs_setpd.ps -@@ -96,7 +96,7 @@ level2dict begin - % we must (carefully) reinstall the old parameters in - % the same device. - .currentpagedevice pop //null currentdevice //null -- {.trysetparams} .internalstopped -+ { .trysetparams } .internalstopped - { - //null - } if -@@ -104,26 +104,32 @@ level2dict begin - { pop pop } - { - SETPDDEBUG { (Error in .trysetparams!) = pstack flush } if -- cleartomark pop pop pop -+ {cleartomark pop pop pop} .internalstopped pop - % if resetting the entire device state failed, at least put back the - % security related key -- currentdevice //null //false mark /.LockSafetyParams .currentpagedevice pop -- /.LockSafetyParams .knownget not {//false} if .putdeviceparamsonly -+ currentdevice //null //false mark /.LockSafetyParams -+ currentpagedevice /.LockSafetyParams .knownget not -+ {systemdict /SAFER .knownget not {//false} } if -+ .putdeviceparamsonly - /.installpagedevice cvx /rangecheck signalerror - } - ifelse pop pop - % A careful reading of the Red Book reveals that an erasepage - % should occur, but *not* an initgraphics. - erasepage .beginpage -- } bind def -+ } bind executeonly def - - /.uninstallpagedevice -- { 2 .endpage { .currentnumcopies //false .outputpage } if -+ { -+ {2 .endpage { .currentnumcopies //false .outputpage } if} .internalstopped pop - nulldevice - } bind def - - (%grestorepagedevice) cvn -- { .uninstallpagedevice grestore .installpagedevice -+ { -+ .uninstallpagedevice -+ grestore -+ .installpagedevice - } bind def - - (%grestoreallpagedevice) cvn -diff --git a/psi/zdevice2.c b/psi/zdevice2.c -index 0c7080d..5447c8c 100644 ---- a/psi/zdevice2.c -+++ b/psi/zdevice2.c -@@ -251,8 +251,8 @@ z2currentgstate(i_ctx_t *i_ctx_p) - /* ------ Wrappers for operators that reset the graphics state. ------ */ - - /* Check whether we need to call out to restore the page device. */ --static bool --restore_page_device(const gs_gstate * pgs_old, const gs_gstate * pgs_new) -+static int -+restore_page_device(i_ctx_t *i_ctx_p, const gs_gstate * pgs_old, const gs_gstate * pgs_new) - { - gx_device *dev_old = gs_currentdevice(pgs_old); - gx_device *dev_new; -@@ -260,9 +260,10 @@ restore_page_device(const gs_gstate * pgs_old, const gs_gstate * pgs_new) - gx_device *dev_t2; - bool samepagedevice = obj_eq(dev_old->memory, &gs_int_gstate(pgs_old)->pagedevice, - &gs_int_gstate(pgs_new)->pagedevice); -+ bool LockSafetyParams = dev_old->LockSafetyParams; - - if ((dev_t1 = (*dev_proc(dev_old, get_page_device)) (dev_old)) == 0) -- return false; -+ return 0; - /* If we are going to putdeviceparams in a callout, we need to */ - /* unlock temporarily. The device will be re-locked as needed */ - /* by putdeviceparams from the pgs_old->pagedevice dict state. */ -@@ -271,23 +272,44 @@ restore_page_device(const gs_gstate * pgs_old, const gs_gstate * pgs_new) - dev_new = gs_currentdevice(pgs_new); - if (dev_old != dev_new) { - if ((dev_t2 = (*dev_proc(dev_new, get_page_device)) (dev_new)) == 0) -- return false; -- if (dev_t1 != dev_t2) -- return true; -+ samepagedevice = true; -+ else if (dev_t1 != dev_t2) -+ samepagedevice = false; -+ } -+ -+ if (LockSafetyParams && !samepagedevice) { -+ os_ptr op = osp; -+ const int max_ops = 512; -+ -+ /* The %grestorepagedevice must complete: the biggest danger -+ is operand stack overflow. As we use get/putdeviceparams -+ that means pushing all the device params onto the stack, -+ pdfwrite having by far the largest number of parameters -+ at (currently) 212 key/value pairs - thus needing (currently) -+ 424 entries on the op stack. Allowing for working stack -+ space, and safety margin..... -+ */ -+ if (max_ops > op - osbot) { -+ if (max_ops >= ref_stack_count(&o_stack)) -+ return_error(gs_error_stackoverflow); -+ } - } - /* - * The current implementation of setpagedevice just sets new - * parameters in the same device object, so we have to check - * whether the page device dictionaries are the same. - */ -- return !samepagedevice; -+ return samepagedevice ? 0 : 1; - } - - /* - grestore - */ - static int - z2grestore(i_ctx_t *i_ctx_p) - { -- if (!restore_page_device(igs, gs_gstate_saved(igs))) -+ int code = restore_page_device(i_ctx_p, igs, gs_gstate_saved(igs)); -+ if (code < 0) return code; -+ -+ if (code == 0) - return gs_grestore(igs); - return push_callout(i_ctx_p, "%grestorepagedevice"); - } -@@ -297,7 +319,9 @@ static int - z2grestoreall(i_ctx_t *i_ctx_p) - { - for (;;) { -- if (!restore_page_device(igs, gs_gstate_saved(igs))) { -+ int code = restore_page_device(i_ctx_p, igs, gs_gstate_saved(igs)); -+ if (code < 0) return code; -+ if (code == 0) { - bool done = !gs_gstate_saved(gs_gstate_saved(igs)); - - gs_grestore(igs); -@@ -328,11 +352,15 @@ z2restore(i_ctx_t *i_ctx_p) - if (code < 0) return code; - - while (gs_gstate_saved(gs_gstate_saved(igs))) { -- if (restore_page_device(igs, gs_gstate_saved(igs))) -+ code = restore_page_device(i_ctx_p, igs, gs_gstate_saved(igs)); -+ if (code < 0) return code; -+ if (code > 0) - return push_callout(i_ctx_p, "%restore1pagedevice"); - gs_grestore(igs); - } -- if (restore_page_device(igs, gs_gstate_saved(igs))) -+ code = restore_page_device(i_ctx_p, igs, gs_gstate_saved(igs)); -+ if (code < 0) return code; -+ if (code > 0) - return push_callout(i_ctx_p, "%restorepagedevice"); - - code = dorestore(i_ctx_p, asave); -@@ -355,9 +383,12 @@ static int - z2setgstate(i_ctx_t *i_ctx_p) - { - os_ptr op = osp; -+ int code; - - check_stype(*op, st_igstate_obj); -- if (!restore_page_device(igs, igstate_ptr(op))) -+ code = restore_page_device(i_ctx_p, igs, igstate_ptr(op)); -+ if (code < 0) return code; -+ if (code == 0) - return zsetgstate(i_ctx_p); - return push_callout(i_ctx_p, "%setgstatepagedevice"); - } --- -2.9.1 - -From 643b24dbd002fb9c131313253c307cf3951b3d47 Mon Sep 17 00:00:00 2001 -From: Chris Liddell <chris.lidd...@artifex.com> -Date: Fri, 7 Sep 2018 08:07:12 +0100 -Subject: [PATCH] Bug 699718(2): Improve/augment stack size checking - -Improve the rebustness of the previous solution (previously it could trigger an -error when there *was* stack capacity available). - -Remove redundant check: we don't need to check if the *current* stack size is -sufficient, before checking the maximum permitted stack size. - -Also check the exec stack, as execstackoverflow can also cause the -Postscript call out to fail. - -Lastly, in event of failure, put the LockSafetyParams flag back in the existing -device (this is only necessary because we don't enfore JOBSERVER mode). - -Note: the Postscript callout (%grestorepagedevice) never pushes any dictionaries -on the dict stack - if that changes, we should check that stack, too. ---- - psi/zdevice2.c | 17 ++++++++++++----- - 1 file changed, 12 insertions(+), 5 deletions(-) - -diff --git a/psi/zdevice2.c b/psi/zdevice2.c -index 5447c8c..159a0c0 100644 ---- a/psi/zdevice2.c -+++ b/psi/zdevice2.c -@@ -278,8 +278,8 @@ restore_page_device(i_ctx_t *i_ctx_p, const gs_gstate * pgs_old, const gs_gstate - } - - if (LockSafetyParams && !samepagedevice) { -- os_ptr op = osp; -- const int max_ops = 512; -+ const int required_ops = 512; -+ const int required_es = 32; - - /* The %grestorepagedevice must complete: the biggest danger - is operand stack overflow. As we use get/putdeviceparams -@@ -289,9 +289,16 @@ restore_page_device(i_ctx_t *i_ctx_p, const gs_gstate * pgs_old, const gs_gstate - 424 entries on the op stack. Allowing for working stack - space, and safety margin..... - */ -- if (max_ops > op - osbot) { -- if (max_ops >= ref_stack_count(&o_stack)) -- return_error(gs_error_stackoverflow); -+ if (required_ops + ref_stack_count(&o_stack) >= ref_stack_max_count(&o_stack)) { -+ gs_currentdevice(pgs_old)->LockSafetyParams = LockSafetyParams; -+ return_error(gs_error_stackoverflow); -+ } -+ /* We also want enough exec stack space - 32 is an overestimate of -+ what we need to complete the Postscript call out. -+ */ -+ if (required_es + ref_stack_count(&e_stack) >= ref_stack_max_count(&e_stack)) { -+ gs_currentdevice(pgs_old)->LockSafetyParams = LockSafetyParams; -+ return_error(gs_error_execstackoverflow); - } - } - /* --- -2.9.1 - - Modified: PKGBUILD =================================================================== --- PKGBUILD 2018-09-13 16:37:58 UTC (rev 334467) +++ PKGBUILD 2018-09-13 16:49:50 UTC (rev 334468) @@ -2,8 +2,8 @@ pkgbase=ghostscript pkgname=(ghostscript ghostxps ghostpcl) -pkgver=9.24 -pkgrel=7 +pkgver=9.25 +pkgrel=1 pkgdesc="An interpreter for the PostScript language" url="https://www.ghostscript.com/" arch=('x86_64') @@ -12,20 +12,8 @@ 'libtiff' 'lcms2' 'dbus' 'libpaper' 'ijs' 'openjpeg2') makedepends=('gtk3' 'gnutls' 'glu' 'freeglut') # https://github.com/ArtifexSoftware/ghostpdl-downloads/releases -source=(https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs${pkgver/./}/ghostpdl-${pkgver}.tar.gz - 0001_ICC_profile_validation.patch - 0002_retain_LockSafetyParams_through_failed_installpagedevice.patch - 0003_Fix_SEGV_seen_in_all-devices_test.patch - 0004_Add_the_ICCProfilesDir_to_the_PermitReading_list.patch - 0005_add_wildcards_to_the_permissions_paths.patch - 0006_stack_size_space_fix.patch) -sha512sums=('a0ed7235808ed79ad88ddf0808ef3eb667ffd1b0300ceda78eac3d0ad69d4a963821fa05319ed822db51911210c4fd7d8dbd4d73951e330fbc7b99e4f00a45fa' - '6cfdd351e8e84968c20cf8f15e01a09a215b6132af89ca0e392716638d925a0f750dab3dbcbdf44f200fb9cc419be5dadccffc226c9a405e888f3580f98cf4ea' - '670ccf36927904fc2e918847baf082753d3b4b81fd0ee2347feb6de5a0ab77eb9c00cb640fcb3c7a0f395694112f3921775a6f614bec08e3d4452155b030951e' - '45be77dc890d9d251541d44fe0ad860a7d83d969ce697bbb32cb469d8837417020f1a017ae7aecbb8fbb45647ad9c3e6f92d321c2adfe6c8b3412c580f4058c5' - 'e64bcf8e5b5f229ca14463477be21555e66a0f3c76e3c01eb9b4d8cbeebba683b9b33a624ac4617af715c281f93106ae5d8425a29ed35416fbd580242a1a27e0' - '52088ef6ca47c5ed6f34ccac2b5234bcd6561175ef35de90ede7322a98e617b37036bf8a092733bec11fea211c7e3806b98c4019b1a806f6616387ee48002ef3' - '4a09455d2e844cf1e8fc91fdfda5e1dd9160dd0a49bad4b1baea186d858bbdaa01980c81022c8f9fb209c329a3668575c47d879cc44db36df6a39bc86eab0928') +source=(https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs${pkgver/./}/ghostpdl-${pkgver}.tar.gz) +sha512sums=('8b5efdbddfaa0395b4ee13b2d109cf610bc85dbba024a8bd9e01af37353649e6405868e2569d098e7c8ab8cb7b76162ab393dd4fad2f52f3bc3ba3047fdbc006') prepare() { cd ghostpdl-${pkgver} @@ -34,17 +22,6 @@ rm -r cups/libs expat ijs jbig2dec jpeg lcms2mt libpng openjpeg tiff zlib # using tree freetype because of https://bugs.archlinux.org/task/56849 # lcms2mt is the new lcms2 fork aimed to replace lcms2 in a thread safe way - - # https://bugs.ghostscript.com/show_bug.cgi?id=699713 - patch -Np1 -i ../0001_ICC_profile_validation.patch - # apply more upstream fixes to solve various crashes - patch -Np1 -i ../0002_retain_LockSafetyParams_through_failed_installpagedevice.patch - patch -Np1 -i ../0003_Fix_SEGV_seen_in_all-devices_test.patch - # FS#59952;FS#59959 - patch -Np1 -i ../0004_Add_the_ICCProfilesDir_to_the_PermitReading_list.patch - patch -Np1 -i ../0005_add_wildcards_to_the_permissions_paths.patch - # FS#59982 - patch -Np1 -i ../0006_stack_size_space_fix.patch } build() { @@ -87,8 +64,6 @@ rm -r "${pkgdir}"/usr/share/man/de install -Dt "${pkgdir}"/usr/share/licenses/${pkgname} -m644 LICENSE - - rm "${pkgdir}"/usr/share/ghostscript/9.24/Resource/Init/gs_init.ps.orig } package_ghostxps() {