diff options
author | Sebastian Rasmussen <sebras@hotmail.com> | 2009-12-02 21:31:46 +0100 |
---|---|---|
committer | Sebastian Rasmussen <sebras@hotmail.com> | 2009-12-02 21:31:46 +0100 |
commit | 326c9ccd045ba174aea8cb67a73069225d7a821e (patch) | |
tree | eeef93069d1ba4b518df1a5e09136fb9b0af5059 | |
parent | 9725395900c67dbad1ae3a555f2e079d55411362 (diff) | |
download | mupdf-326c9ccd045ba174aea8cb67a73069225d7a821e.tar.xz |
Warn on graphics state under-/overflow instead of giving errors.
-rw-r--r-- | mupdf/pdf_interpret.c | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/mupdf/pdf_interpret.c b/mupdf/pdf_interpret.c index 01db2548..24ed036b 100644 --- a/mupdf/pdf_interpret.c +++ b/mupdf/pdf_interpret.c @@ -92,13 +92,16 @@ pdf_dropmaterial(pdf_material *mat) return mat; } -static fz_error +static void gsave(pdf_csi *csi) { pdf_gstate *gs = csi->gstate + csi->gtop; if (csi->gtop == 31) - return fz_throw("gstate overflow in content stream"); + { + fz_warn("gstate overflow in content stream"); + return; + } memcpy(&csi->gstate[csi->gtop + 1], &csi->gstate[csi->gtop], sizeof(pdf_gstate)); @@ -108,17 +111,18 @@ gsave(pdf_csi *csi) pdf_keepmaterial(&gs->fill); if (gs->font) pdf_keepfont(gs->font); - - return fz_okay; } -static fz_error +static void grestore(pdf_csi *csi) { pdf_gstate *gs = csi->gstate + csi->gtop; if (csi->gtop == 0) - return fz_throw("gstate underflow in content stream"); + { + fz_warn("gstate underflow in content stream"); + return; + } pdf_dropmaterial(&gs->stroke); pdf_dropmaterial(&gs->fill); @@ -126,15 +130,13 @@ grestore(pdf_csi *csi) pdf_dropfont(gs->font); csi->gtop --; - - return fz_okay; } void pdf_dropcsi(pdf_csi *csi) { while (csi->gtop) - grestore(csi); /* no need to check for impossible errors */ + grestore(csi); if (csi->gstate[csi->gtop].fill.cs) fz_dropcolorspace(csi->gstate[csi->gtop].fill.cs); @@ -169,10 +171,7 @@ runxobject(pdf_csi *csi, pdf_xref *xref, fz_obj *rdb, pdf_xobject *xobj) fz_stream *file; pdf_gstate *gstate; - /* gsave */ - error = gsave(csi); - if (error) - return fz_rethrow(error, "cannot push graphics state"); + gsave(csi); gstate = csi->gstate + csi->gtop; @@ -239,10 +238,7 @@ runxobject(pdf_csi *csi, pdf_xref *xref, fz_obj *rdb, pdf_xobject *xobj) if (error) return fz_rethrow(error, "cannot interpret XObject stream"); - /* grestore */ - error = grestore(csi); - if (error) - return fz_rethrow(error, "cannot pop graphics state"); + grestore(csi); return fz_okay; } @@ -1092,17 +1088,13 @@ Lsetcolor: case 'q': if (csi->top != 0) goto syntaxerror; - error = gsave(csi); - if (error) - return fz_rethrow(error, "cannot gsave"); + gsave(csi); break; case 'Q': if (csi->top != 0) goto syntaxerror; - error = grestore(csi); - if (error) - return fz_rethrow(error, "cannot grestore"); + grestore(csi); break; case 'w': |