040b22b
From 875a0095f37626a721c7ff57d606a0f95af03913 Mon Sep 17 00:00:00 2001
040b22b
From: Ken Sharp <ken.sharp@artifex.com>
040b22b
Date: Wed, 5 Oct 2016 10:10:58 +0100
040b22b
Subject: [PATCH] DSC parser - validate parameters
040b22b
040b22b
Bug #697190 ".initialize_dsc_parser doesn't validate the parameter is a dict type before using it."
040b22b
040b22b
Regardless of any security implications, its simply wrong for a PostScript
040b22b
operator not to validate its parameter(s).
040b22b
040b22b
No differences expected.
040b22b
---
040b22b
 psi/zdscpars.c | 13 +++++++++----
040b22b
 1 file changed, 9 insertions(+), 4 deletions(-)
040b22b
040b22b
diff --git a/psi/zdscpars.c b/psi/zdscpars.c
040b22b
index c05e154..9b4b605 100644
040b22b
--- a/psi/zdscpars.c
040b22b
+++ b/psi/zdscpars.c
040b22b
@@ -150,11 +150,16 @@ zinitialize_dsc_parser(i_ctx_t *i_ctx_p)
040b22b
     ref local_ref;
040b22b
     int code;
040b22b
     os_ptr const op = osp;
040b22b
-    dict * const pdict = op->value.pdict;
040b22b
-    gs_memory_t * const mem = (gs_memory_t *)dict_memory(pdict);
040b22b
-    dsc_data_t * const data =
040b22b
-        gs_alloc_struct(mem, dsc_data_t, &st_dsc_data_t, "DSC parser init");
040b22b
+    dict *pdict;
040b22b
+    gs_memory_t *mem;
040b22b
+    dsc_data_t *data;
040b22b
 
040b22b
+    check_read_type(*op, t_dictionary);
040b22b
+
040b22b
+    pdict = op->value.pdict;
040b22b
+    mem = (gs_memory_t *)dict_memory(pdict);
040b22b
+
040b22b
+    data = gs_alloc_struct(mem, dsc_data_t, &st_dsc_data_t, "DSC parser init");
040b22b
     if (!data)
040b22b
         return_error(gs_error_VMerror);
040b22b
     data->document_level = 0;
040b22b
-- 
040b22b
2.7.4
040b22b