diff options
author | Tor Andersson <tor@ghostscript.com> | 2010-07-14 00:18:30 +0200 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2010-07-14 00:18:30 +0200 |
commit | 48f6f0e2cd05182613b78322c2b924635caf3f55 (patch) | |
tree | 9e7e86de4308d1f7baa31fe9d6149e380b15e752 | |
parent | 32abf6c038b6dcf821c8afc67f4c9b31af89bdcb (diff) | |
download | mupdf-48f6f0e2cd05182613b78322c2b924635caf3f55.tar.xz |
Be paranoid about pattern colorspaces being set without a current pattern.
-rw-r--r-- | mupdf/pdf_build.c | 104 |
1 files changed, 65 insertions, 39 deletions
diff --git a/mupdf/pdf_build.c b/mupdf/pdf_build.c index a2a5432a..ec3e8baf 100644 --- a/mupdf/pdf_build.c +++ b/mupdf/pdf_build.c @@ -252,19 +252,21 @@ pdf_showimage(pdf_csi *csi, pdf_image *image) gstate->fill.cs, gstate->fill.v, gstate->fill.alpha); break; case PDF_MPATTERN: - bbox.x0 = 0; - bbox.y0 = 0; - bbox.x1 = 1; - bbox.y1 = 1; - bbox = fz_transformrect(gstate->ctm, bbox); - csi->dev->clipimagemask(csi->dev->user, tile, gstate->ctm); - pdf_showpattern(csi, gstate->fill.pattern, bbox, PDF_MFILL); - csi->dev->popclip(csi->dev->user); + if (gstate->fill.pattern) + { + bbox = fz_transformrect(gstate->ctm, fz_unitrect); + csi->dev->clipimagemask(csi->dev->user, tile, gstate->ctm); + pdf_showpattern(csi, gstate->fill.pattern, bbox, PDF_MFILL); + csi->dev->popclip(csi->dev->user); + } break; case PDF_MSHADE: - csi->dev->clipimagemask(csi->dev->user, tile, gstate->ctm); - csi->dev->fillshade(csi->dev->user, gstate->fill.shade, gstate->ctm); - csi->dev->popclip(csi->dev->user); + if (gstate->fill.shade) + { + csi->dev->clipimagemask(csi->dev->user, tile, gstate->ctm); + csi->dev->fillshade(csi->dev->user, gstate->fill.shade, gstate->ctm); + csi->dev->popclip(csi->dev->user); + } break; } } @@ -310,15 +312,21 @@ pdf_showpath(pdf_csi *csi, int doclose, int dofill, int dostroke, int evenodd) gstate->fill.cs, gstate->fill.v, gstate->fill.alpha); break; case PDF_MPATTERN: - bbox = fz_boundpath(path, nil, gstate->ctm); - csi->dev->clippath(csi->dev->user, path, evenodd, gstate->ctm); - pdf_showpattern(csi, gstate->fill.pattern, bbox, PDF_MFILL); - csi->dev->popclip(csi->dev->user); + if (gstate->fill.pattern) + { + bbox = fz_boundpath(path, nil, gstate->ctm); + csi->dev->clippath(csi->dev->user, path, evenodd, gstate->ctm); + pdf_showpattern(csi, gstate->fill.pattern, bbox, PDF_MFILL); + csi->dev->popclip(csi->dev->user); + } break; case PDF_MSHADE: - csi->dev->clippath(csi->dev->user, path, evenodd, gstate->ctm); - csi->dev->fillshade(csi->dev->user, gstate->fill.shade, csi->topctm); - csi->dev->popclip(csi->dev->user); + if (gstate->fill.shade) + { + csi->dev->clippath(csi->dev->user, path, evenodd, gstate->ctm); + csi->dev->fillshade(csi->dev->user, gstate->fill.shade, csi->topctm); + csi->dev->popclip(csi->dev->user); + } break; } } @@ -334,15 +342,21 @@ pdf_showpath(pdf_csi *csi, int doclose, int dofill, int dostroke, int evenodd) gstate->stroke.cs, gstate->stroke.v, gstate->stroke.alpha); break; case PDF_MPATTERN: - bbox = fz_boundpath(path, &gstate->strokestate, gstate->ctm); - csi->dev->clipstrokepath(csi->dev->user, path, &gstate->strokestate, gstate->ctm); - pdf_showpattern(csi, gstate->stroke.pattern, bbox, PDF_MFILL); - csi->dev->popclip(csi->dev->user); + if (gstate->stroke.pattern) + { + bbox = fz_boundpath(path, &gstate->strokestate, gstate->ctm); + csi->dev->clipstrokepath(csi->dev->user, path, &gstate->strokestate, gstate->ctm); + pdf_showpattern(csi, gstate->stroke.pattern, bbox, PDF_MFILL); + csi->dev->popclip(csi->dev->user); + } break; case PDF_MSHADE: - csi->dev->clipstrokepath(csi->dev->user, path, &gstate->strokestate, gstate->ctm); - csi->dev->fillshade(csi->dev->user, gstate->stroke.shade, csi->topctm); - csi->dev->popclip(csi->dev->user); + if (gstate->stroke.shade) + { + csi->dev->clipstrokepath(csi->dev->user, path, &gstate->strokestate, gstate->ctm); + csi->dev->fillshade(csi->dev->user, gstate->stroke.shade, csi->topctm); + csi->dev->popclip(csi->dev->user); + } break; } } @@ -424,15 +438,21 @@ pdf_flushtext(pdf_csi *csi) gstate->fill.cs, gstate->fill.v, gstate->fill.alpha); break; case PDF_MPATTERN: - bbox = fz_boundtext(text, gstate->ctm); - csi->dev->cliptext(csi->dev->user, text, gstate->ctm, 0); - pdf_showpattern(csi, gstate->fill.pattern, bbox, PDF_MFILL); - csi->dev->popclip(csi->dev->user); + if (gstate->fill.pattern) + { + bbox = fz_boundtext(text, gstate->ctm); + csi->dev->cliptext(csi->dev->user, text, gstate->ctm, 0); + pdf_showpattern(csi, gstate->fill.pattern, bbox, PDF_MFILL); + csi->dev->popclip(csi->dev->user); + } break; case PDF_MSHADE: - csi->dev->cliptext(csi->dev->user, text, gstate->ctm, 0); - csi->dev->fillshade(csi->dev->user, gstate->fill.shade, csi->topctm); - csi->dev->popclip(csi->dev->user); + if (gstate->fill.shade) + { + csi->dev->cliptext(csi->dev->user, text, gstate->ctm, 0); + csi->dev->fillshade(csi->dev->user, gstate->fill.shade, csi->topctm); + csi->dev->popclip(csi->dev->user); + } break; } } @@ -448,15 +468,21 @@ pdf_flushtext(pdf_csi *csi) gstate->stroke.cs, gstate->stroke.v, gstate->stroke.alpha); break; case PDF_MPATTERN: - bbox = fz_boundtext(text, gstate->ctm); - csi->dev->clipstroketext(csi->dev->user, text, &gstate->strokestate, gstate->ctm); - pdf_showpattern(csi, gstate->stroke.pattern, bbox, PDF_MFILL); - csi->dev->popclip(csi->dev->user); + if (gstate->stroke.pattern) + { + bbox = fz_boundtext(text, gstate->ctm); + csi->dev->clipstroketext(csi->dev->user, text, &gstate->strokestate, gstate->ctm); + pdf_showpattern(csi, gstate->stroke.pattern, bbox, PDF_MFILL); + csi->dev->popclip(csi->dev->user); + } break; case PDF_MSHADE: - csi->dev->clipstroketext(csi->dev->user, text, &gstate->strokestate, gstate->ctm); - csi->dev->fillshade(csi->dev->user, gstate->stroke.shade, csi->topctm); - csi->dev->popclip(csi->dev->user); + if (gstate->stroke.shade) + { + csi->dev->clipstroketext(csi->dev->user, text, &gstate->strokestate, gstate->ctm); + csi->dev->fillshade(csi->dev->user, gstate->stroke.shade, csi->topctm); + csi->dev->popclip(csi->dev->user); + } break; } } |