* gnu/packages/ghostscript.scm (ghostscript): Update to 9.21. [source]: Fetch the source from Artifex. [native-inputs]: Remove pkg-config. [inputs]: Add jbig2dec and use libjpeg instead of libjpeg-8. [arguments]: Add #:configure-flags. [replacement]: Remove field. (ghostcript/fixed): Remove variable. * gnu/packages/patches/ghostscript-CVE-2017-8291.patch, gnu/packages/patches/ghostscript-runpath.patch: Adjust to new upstream source. * gnu/packages/patches/ghostscript-CVE-2013-5653.patch, gnu/packages/patches/ghostscript-CVE-2015-3228.patch, gnu/packages/patches/ghostscript-CVE-2016-7976.patch, gnu/packages/patches/ghostscript-CVE-2016-7978.patch, gnu/packages/patches/ghostscript-CVE-2016-7979.patch, gnu/packages/patches/ghostscript-CVE-2016-8602.patch: Delete files. * gnu/local.mk (dist_patch_DATA): Adjust accordingly.
		
			
				
	
	
		
			195 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Fix CVE-2017-8291:
 | 
						|
 | 
						|
https://bugs.ghostscript.com/show_bug.cgi?id=697799
 | 
						|
https://bugs.ghostscript.com/show_bug.cgi?id=697808 (duplicate)
 | 
						|
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8291
 | 
						|
 | 
						|
Patches copied from upstream source repository:
 | 
						|
 | 
						|
https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f83478c88c2e05d6e8d79ca4557eb039354d2f3
 | 
						|
https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=04b37bbce174eed24edec7ad5b920eb93db4d47d
 | 
						|
https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=57f20719e1cfaea77b67cb26e26de7fe4d7f9b2e
 | 
						|
https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ccfd2c75ac9be4cbd369e4cbdd40ba11a0c7bdad
 | 
						|
 | 
						|
From 4f83478c88c2e05d6e8d79ca4557eb039354d2f3 Mon Sep 17 00:00:00 2001
 | 
						|
From: Chris Liddell <chris.liddell@artifex.com>
 | 
						|
Date: Thu, 27 Apr 2017 13:03:33 +0100
 | 
						|
Subject: [PATCH] Bug 697799: have .eqproc check its parameters
 | 
						|
 | 
						|
The Ghostscript custom operator .eqproc was not check the number or type of
 | 
						|
the parameters it was given.
 | 
						|
---
 | 
						|
 psi/zmisc3.c | 6 ++++++
 | 
						|
 1 file changed, 6 insertions(+)
 | 
						|
 | 
						|
diff --git a/psi/zmisc3.c b/psi/zmisc3.c
 | 
						|
index 54b304246..37293ff4b 100644
 | 
						|
--- a/psi/zmisc3.c
 | 
						|
+++ b/psi/zmisc3.c
 | 
						|
@@ -56,6 +56,12 @@ zeqproc(i_ctx_t *i_ctx_p)
 | 
						|
     ref2_t stack[MAX_DEPTH + 1];
 | 
						|
     ref2_t *top = stack;
 | 
						|
 
 | 
						|
+    if (ref_stack_count(&o_stack) < 2)
 | 
						|
+        return_error(gs_error_stackunderflow);
 | 
						|
+    if (!r_is_array(op - 1) || !r_is_array(op)) {
 | 
						|
+        return_error(gs_error_typecheck);
 | 
						|
+    }
 | 
						|
+
 | 
						|
     make_array(&stack[0].proc1, 0, 1, op - 1);
 | 
						|
     make_array(&stack[0].proc2, 0, 1, op);
 | 
						|
     for (;;) {
 | 
						|
-- 
 | 
						|
2.13.0
 | 
						|
 | 
						|
From 04b37bbce174eed24edec7ad5b920eb93db4d47d Mon Sep 17 00:00:00 2001
 | 
						|
From: Chris Liddell <chris.liddell@artifex.com>
 | 
						|
Date: Thu, 27 Apr 2017 13:21:31 +0100
 | 
						|
Subject: [PATCH] Bug 697799: have .rsdparams check its parameters
 | 
						|
 | 
						|
The Ghostscript internal operator .rsdparams wasn't checking the number or
 | 
						|
type of the operands it was being passed. Do so.
 | 
						|
---
 | 
						|
 psi/zfrsd.c | 22 +++++++++++++++-------
 | 
						|
 1 file changed, 15 insertions(+), 7 deletions(-)
 | 
						|
 | 
						|
diff --git a/psi/zfrsd.c b/psi/zfrsd.c
 | 
						|
index 191107d8a..950588d69 100644
 | 
						|
--- a/psi/zfrsd.c
 | 
						|
+++ b/psi/zfrsd.c
 | 
						|
@@ -49,13 +49,20 @@ zrsdparams(i_ctx_t *i_ctx_p)
 | 
						|
     ref *pFilter;
 | 
						|
     ref *pDecodeParms;
 | 
						|
     int Intent = 0;
 | 
						|
-    bool AsyncRead;
 | 
						|
+    bool AsyncRead = false;
 | 
						|
     ref empty_array, filter1_array, parms1_array;
 | 
						|
     uint i;
 | 
						|
-    int code;
 | 
						|
+    int code = 0;
 | 
						|
+
 | 
						|
+    if (ref_stack_count(&o_stack) < 1)
 | 
						|
+        return_error(gs_error_stackunderflow);
 | 
						|
+    if (!r_has_type(op, t_dictionary) && !r_has_type(op, t_null)) {
 | 
						|
+        return_error(gs_error_typecheck);
 | 
						|
+    }
 | 
						|
 
 | 
						|
     make_empty_array(&empty_array, a_readonly);
 | 
						|
-    if (dict_find_string(op, "Filter", &pFilter) > 0) {
 | 
						|
+    if (r_has_type(op, t_dictionary)
 | 
						|
+        && dict_find_string(op, "Filter", &pFilter) > 0) {
 | 
						|
         if (!r_is_array(pFilter)) {
 | 
						|
             if (!r_has_type(pFilter, t_name))
 | 
						|
                 return_error(gs_error_typecheck);
 | 
						|
@@ -94,12 +101,13 @@ zrsdparams(i_ctx_t *i_ctx_p)
 | 
						|
                 return_error(gs_error_typecheck);
 | 
						|
         }
 | 
						|
     }
 | 
						|
-    code = dict_int_param(op, "Intent", 0, 3, 0, &Intent);
 | 
						|
+    if (r_has_type(op, t_dictionary))
 | 
						|
+        code = dict_int_param(op, "Intent", 0, 3, 0, &Intent);
 | 
						|
     if (code < 0 && code != gs_error_rangecheck) /* out-of-range int is ok, use 0 */
 | 
						|
         return code;
 | 
						|
-    if ((code = dict_bool_param(op, "AsyncRead", false, &AsyncRead)) < 0
 | 
						|
-        )
 | 
						|
-        return code;
 | 
						|
+    if (r_has_type(op, t_dictionary))
 | 
						|
+        if ((code = dict_bool_param(op, "AsyncRead", false, &AsyncRead)) < 0)
 | 
						|
+            return code;
 | 
						|
     push(1);
 | 
						|
     op[-1] = *pFilter;
 | 
						|
     if (pDecodeParms)
 | 
						|
-- 
 | 
						|
2.13.0
 | 
						|
 | 
						|
From 57f20719e1cfaea77b67cb26e26de7fe4d7f9b2e Mon Sep 17 00:00:00 2001
 | 
						|
From: Chris Liddell <chris.liddell@artifex.com>
 | 
						|
Date: Wed, 3 May 2017 12:05:45 +0100
 | 
						|
Subject: [PATCH] Bug 697846: revision to commit 4f83478c88 (.eqproc)
 | 
						|
 | 
						|
When using the "DELAYBIND" feature, it turns out that .eqproc can be called with
 | 
						|
parameters that are not both procedures. In this case, it turns out, the
 | 
						|
expectation is for the operator to return 'false', rather than throw an error.
 | 
						|
---
 | 
						|
 psi/zmisc3.c | 15 +++++++++++++--
 | 
						|
 1 file changed, 13 insertions(+), 2 deletions(-)
 | 
						|
 | 
						|
diff --git a/psi/zmisc3.c b/psi/zmisc3.c
 | 
						|
index 37293ff4b..3f01d39a3 100644
 | 
						|
--- a/psi/zmisc3.c
 | 
						|
+++ b/psi/zmisc3.c
 | 
						|
@@ -38,6 +38,15 @@ zcliprestore(i_ctx_t *i_ctx_p)
 | 
						|
     return gs_cliprestore(igs);
 | 
						|
 }
 | 
						|
 
 | 
						|
+static inline bool
 | 
						|
+eqproc_check_type(ref *r)
 | 
						|
+{
 | 
						|
+    return r_has_type(r, t_array)
 | 
						|
+           || r_has_type(r, t_mixedarray)
 | 
						|
+           || r_has_type(r, t_shortarray)
 | 
						|
+           || r_has_type(r, t_oparray);
 | 
						|
+}
 | 
						|
+
 | 
						|
 /* <proc1> <proc2> .eqproc <bool> */
 | 
						|
 /*
 | 
						|
  * Test whether two procedures are equal to depth 10.
 | 
						|
@@ -58,8 +67,10 @@ zeqproc(i_ctx_t *i_ctx_p)
 | 
						|
 
 | 
						|
     if (ref_stack_count(&o_stack) < 2)
 | 
						|
         return_error(gs_error_stackunderflow);
 | 
						|
-    if (!r_is_array(op - 1) || !r_is_array(op)) {
 | 
						|
-        return_error(gs_error_typecheck);
 | 
						|
+    if (!eqproc_check_type(op -1) || !eqproc_check_type(op)) {
 | 
						|
+        make_false(op - 1);
 | 
						|
+        pop(1);
 | 
						|
+        return 0;
 | 
						|
     }
 | 
						|
 
 | 
						|
     make_array(&stack[0].proc1, 0, 1, op - 1);
 | 
						|
-- 
 | 
						|
2.13.0
 | 
						|
 | 
						|
From ccfd2c75ac9be4cbd369e4cbdd40ba11a0c7bdad Mon Sep 17 00:00:00 2001
 | 
						|
From: Chris Liddell <chris.liddell@artifex.com>
 | 
						|
Date: Thu, 11 May 2017 14:07:48 +0100
 | 
						|
Subject: [PATCH] Bug 697892: fix check for op stack underflow.
 | 
						|
 | 
						|
In the original fix, I used the wrong method to check for stack underflow, this
 | 
						|
is using the correct method.
 | 
						|
---
 | 
						|
 psi/zfrsd.c  | 3 +--
 | 
						|
 psi/zmisc3.c | 3 +--
 | 
						|
 2 files changed, 2 insertions(+), 4 deletions(-)
 | 
						|
 | 
						|
diff --git a/psi/zfrsd.c b/psi/zfrsd.c
 | 
						|
index 950588d69..9c035b96d 100644
 | 
						|
--- a/psi/zfrsd.c
 | 
						|
+++ b/psi/zfrsd.c
 | 
						|
@@ -54,8 +54,7 @@ zrsdparams(i_ctx_t *i_ctx_p)
 | 
						|
     uint i;
 | 
						|
     int code = 0;
 | 
						|
 
 | 
						|
-    if (ref_stack_count(&o_stack) < 1)
 | 
						|
-        return_error(gs_error_stackunderflow);
 | 
						|
+    check_op(1);
 | 
						|
     if (!r_has_type(op, t_dictionary) && !r_has_type(op, t_null)) {
 | 
						|
         return_error(gs_error_typecheck);
 | 
						|
     }
 | 
						|
diff --git a/psi/zmisc3.c b/psi/zmisc3.c
 | 
						|
index 3f01d39a3..43803b55b 100644
 | 
						|
--- a/psi/zmisc3.c
 | 
						|
+++ b/psi/zmisc3.c
 | 
						|
@@ -65,8 +65,7 @@ zeqproc(i_ctx_t *i_ctx_p)
 | 
						|
     ref2_t stack[MAX_DEPTH + 1];
 | 
						|
     ref2_t *top = stack;
 | 
						|
 
 | 
						|
-    if (ref_stack_count(&o_stack) < 2)
 | 
						|
-        return_error(gs_error_stackunderflow);
 | 
						|
+    check_op(2);
 | 
						|
     if (!eqproc_check_type(op -1) || !eqproc_check_type(op)) {
 | 
						|
         make_false(op - 1);
 | 
						|
         pop(1);
 | 
						|
-- 
 | 
						|
2.13.0
 | 
						|
 |