Fix for 687277, /undefined in token
Alex Cherepanov <[email protected]>
| Newsgroups | gmane.comp.printing.ghostscript.patches |
|---|---|
| Organization | Coscript Software |
| Message-ID | <[email protected]> |
Log message: Disable immediately evaluated named during PDF scanning because Acrobat Distiller for 5.0.5 for Mac generates PDF files that assume //Foo parsed as /and Foo Fix bug 687277 from customer 440 This is a draft version. I'm not sure that we need another user parameter but the current usage of PDFScanRules is not compatible with catching syntax errors. Alternatively, we can set PDFScanRules before running the PDF file but this will prevent us from validating the PDF file. The change will be documented later if the fix is accepted in general. The fix was tested on a small set of files only. _______________________________________________ gs-code-review mailing list [email protected] http://www.ghostscript.com/mailman/listinfo/gs-code-review
eval.diff
(text/plain, 3.6 KB)
Index: gs/src/iscan.h
===================================================================
RCS file: /cvs/ghostscript/gs/src/iscan.h,v
retrieving revision 1.8
diff -b -u -r1.8 iscan.h
--- gs/src/iscan.h 16 Jun 2002 04:47:10 -0000 1.8
+++ gs/src/iscan.h 3 Feb 2004 06:05:38 -0000
@@ -117,6 +117,9 @@
#define SCAN_PDF_RULES 16 /* Special PDF scanning rules used */
/* This is for compatibility with Adobe */
/* Acrobat Reader */
+#define SCAN_NO_IMMEDIATE_EVAL 32 /* Disable immediate evaluation. Scan //Name */
+ /* as / and /Name. This is set for PDF and */
+ /* can be useful for Level 1 compatibility */
void scanner_state_init_options(scanner_state *sstate, int options);
#define scanner_state_init_check(pstate, from_string, check_only)\
scanner_state_init_options(pstate,\
Index: gs/src/iscan.c
===================================================================
RCS file: /cvs/ghostscript/gs/src/iscan.c,v
retrieving revision 1.16
diff -b -u -r1.16 iscan.c
--- gs/src/iscan.c 4 Dec 2003 12:35:35 -0000 1.16
+++ gs/src/iscan.c 3 Feb 2004 06:05:38 -0000
@@ -434,6 +434,7 @@
int sign;
const bool check_only = (pstate->s_options & SCAN_CHECK_ONLY) != 0;
const bool PDFScanRules = (i_ctx_p->scanner_options & SCAN_PDF_RULES) != 0;
+ const bool no_immediate_eval = (i_ctx_p->scanner_options & SCAN_NO_IMMEDIATE_EVAL) != 0;
scanner_state sstate;
#define pstack sstate.s_pstack
@@ -679,8 +680,16 @@
ensure2(scanning_none);
c = scan_getc();
if (c == '/') {
+ if (no_immediate_eval) {
+ name_type = 1;
+ try_number = false;
+ da.base = da.limit = daptr = 0;
+ da.is_dynamic = false;
+ goto nx;
+ } else {
name_type = 2;
c = scan_getc();
+ }
} else
name_type = 1;
try_number = false;
Index: gs/src/ztoken.c
===================================================================
RCS file: /cvs/ghostscript/gs/src/ztoken.c,v
retrieving revision 1.12
diff -b -u -r1.12 ztoken.c
--- gs/src/ztoken.c 15 May 2003 22:25:47 -0000 1.12
+++ gs/src/ztoken.c 3 Feb 2004 06:05:38 -0000
@@ -343,10 +343,11 @@
const char *pname;
int option;
} named_scanner_option_t;
- static const named_scanner_option_t named_options[3] = {
+ static const named_scanner_option_t named_options[4] = {
{"ProcessComment", SCAN_PROCESS_COMMENTS},
{"ProcessDSCComment", SCAN_PROCESS_DSC_COMMENTS},
- {"PDFScanRules", SCAN_PDF_RULES}
+ {"PDFScanRules", SCAN_PDF_RULES},
+ {"NoImmediateEval", SCAN_NO_IMMEDIATE_EVAL}
};
int options = old_options;
int i;
Index: gs/lib/pdf_main.ps
===================================================================
RCS file: /cvs/ghostscript/gs/lib/pdf_main.ps,v
retrieving revision 1.84
diff -b -u -r1.84 pdf_main.ps
--- gs/lib/pdf_main.ps 19 Jan 2004 16:52:32 -0000 1.84
+++ gs/lib/pdf_main.ps 3 Feb 2004 06:05:39 -0000
@@ -117,6 +117,7 @@
% This is counter-intuitive, and we don't understand why it happens,
% but the improvement is significant.
/PDFTopSave save def
+ << /NoImmediateEval true >> setuserparams
0 setobjectformat
/Page# null def
/Page null def
Index: gs/lib/pdf_draw.ps
===================================================================
RCS file: /cvs/ghostscript/gs/lib/pdf_draw.ps,v
retrieving revision 1.79
diff -b -u -r1.79 pdf_draw.ps
--- gs/lib/pdf_draw.ps 22 Oct 2003 08:55:44 -0000 1.79
+++ gs/lib/pdf_draw.ps 3 Feb 2004 06:05:39 -0000
@@ -984,6 +984,7 @@
DOPS
{
//_dops_save 0 save put
+ << /NoImmediateEval false >> setuserparams
true resolvestream cvx exec
//_dops_save 0 get restore
}