summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2004-11-25 08:19:33 +0100
committerTor Andersson <tor@ghostscript.com>2004-11-25 08:19:33 +0100
commit6a2ce62be0518a6e5690d6a1d23527ede5a91150 (patch)
treeca8a8afdd907b697bd2394c9b3dbc7b7e9ca0f0a
parenta93da46ada76df7aa4559826e63ab1ac02bed4b3 (diff)
downloadmupdf-6a2ce62be0518a6e5690d6a1d23527ede5a91150.tar.xz
handle bogus pattern colorspaces. fix double-alpha-blend in rastport.c
-rw-r--r--include/mupdf/rsrc.h1
-rw-r--r--mupdf/colorspace1.c15
-rw-r--r--mupdf/unicode.c2
-rw-r--r--render/rastport.c12
-rw-r--r--render/render.c4
5 files changed, 25 insertions, 9 deletions
diff --git a/include/mupdf/rsrc.h b/include/mupdf/rsrc.h
index 39222351..60762ce4 100644
--- a/include/mupdf/rsrc.h
+++ b/include/mupdf/rsrc.h
@@ -40,6 +40,7 @@ extern fz_colorspace *pdf_devicegray;
extern fz_colorspace *pdf_devicergb;
extern fz_colorspace *pdf_devicecmyk;
extern fz_colorspace *pdf_devicelab;
+extern fz_colorspace *pdf_devicepattern;
void pdf_convcolor(fz_colorspace *ss, float *sv, fz_colorspace *ds, float *dv);
void pdf_convpixmap(fz_colorspace *ss, fz_pixmap *sp, fz_colorspace *ds, fz_pixmap *dp);
diff --git a/mupdf/colorspace1.c b/mupdf/colorspace1.c
index 5d943fdb..b1608740 100644
--- a/mupdf/colorspace1.c
+++ b/mupdf/colorspace1.c
@@ -207,10 +207,16 @@ static struct cielab kdevicelab =
{ -100, 100, -100, 100 },
};
+static fz_colorspace kdevicepattern =
+{
+ -1, "Pattern", 0, nil, nil, nil, nil, nil
+};
+
fz_colorspace *pdf_devicegray = &kdevicegray.super;
fz_colorspace *pdf_devicergb = &kdevicergb.super;
fz_colorspace *pdf_devicecmyk = &kdevicecmyk;
fz_colorspace *pdf_devicelab = &kdevicelab.super;
+fz_colorspace *pdf_devicepattern = &kdevicepattern;
/*
* Colorspace parsing
@@ -622,6 +628,8 @@ pdf_loadcolorspace(fz_colorspace **csp, pdf_xref *xref, fz_obj *obj)
*csp = pdf_devicergb;
else if (!strcmp(fz_toname(obj), "CMYK"))
*csp = pdf_devicecmyk;
+ else if (!strcmp(fz_toname(obj), "Pattern"))
+ *csp = pdf_devicepattern;
else
return fz_throw("unknown colorspace: %s", fz_toname(obj));
return nil;
@@ -669,7 +677,14 @@ pdf_loadcolorspace(fz_colorspace **csp, pdf_xref *xref, fz_obj *obj)
/* load base colorspace instead */
else if (!strcmp(fz_toname(name), "Pattern"))
+ {
+ if (!fz_arrayget(obj, 1))
+ {
+ *csp = pdf_devicepattern;
+ return nil;
+ }
return pdf_loadcolorspace(csp, xref, fz_arrayget(obj, 1));
+ }
else
return fz_throw("syntaxerror: unknown colorspace %s", fz_toname(name));
diff --git a/mupdf/unicode.c b/mupdf/unicode.c
index 42fba1c0..9aa14001 100644
--- a/mupdf/unicode.c
+++ b/mupdf/unicode.c
@@ -78,7 +78,7 @@ pdf_loadtounicode(pdf_font *font, pdf_xref *xref,
return nil;
}
- fz_warn("font: cannot create unicode conversion\n", collection);
+ fz_warn("font: cannot create unicode conversion", collection);
return nil;
}
diff --git a/render/rastport.c b/render/rastport.c
index 112ab5ea..6d6b3b8a 100644
--- a/render/rastport.c
+++ b/render/rastport.c
@@ -369,9 +369,9 @@ static void img_4o4(FZ_PSRC, FZ_PDST, FZ_PCTM)
sampleargb(src, srcw, srch, u, v, argb);
ssa = 255 - argb[0];
dstp[0] = argb[0] + fz_mul255(dstp[0], ssa);
- dstp[1] = argb[1] + fz_mul255((short)dstp[1] - argb[1], ssa);
- dstp[2] = argb[2] + fz_mul255((short)dstp[2] - argb[2], ssa);
- dstp[3] = argb[3] + fz_mul255((short)dstp[3] - argb[3], ssa);
+ dstp[1] = argb[1] + fz_mul255(dstp[1], ssa);
+ dstp[2] = argb[2] + fz_mul255(dstp[2], ssa);
+ dstp[3] = argb[3] + fz_mul255(dstp[3], ssa);
dstp += 4;
u += fa;
v += fb;
@@ -396,9 +396,9 @@ static void img_w3i1o4(byte *rgb, FZ_PSRC, FZ_PDST, FZ_PCTM)
sa = samplemask(src, srcw, srch, u, v);
ssa = 255 - sa;
dstp[0] = sa + fz_mul255(dstp[0], ssa);
- dstp[1] = rgb[0] + fz_mul255((short)dstp[1] - rgb[0], ssa);
- dstp[2] = rgb[1] + fz_mul255((short)dstp[2] - rgb[1], ssa);
- dstp[3] = rgb[2] + fz_mul255((short)dstp[3] - rgb[2], ssa);
+ dstp[1] = rgb[0] + fz_mul255(dstp[1], ssa);
+ dstp[2] = rgb[1] + fz_mul255(dstp[2], ssa);
+ dstp[3] = rgb[2] + fz_mul255(dstp[3], ssa);
dstp += 4;
u += fa;
v += fb;
diff --git a/render/render.c b/render/render.c
index b72f069e..77f04e22 100644
--- a/render/render.c
+++ b/render/render.c
@@ -1,7 +1,7 @@
#include <fitz.h>
-#define noDEBUG(args...) printf(args)
-#define DEBUG(args...)
+#define DEBUG(args...) printf(args)
+#define noDEBUG(args...)
#define FNONE 0
#define FOVER 1