summaryrefslogtreecommitdiff
path: root/fitz
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2012-07-02 17:58:08 +0100
committerRobin Watts <robin.watts@artifex.com>2012-07-04 10:40:18 +0100
commit12799e9be77c85eba11f70523d6ca9112266adae (patch)
tree3fdbef5fac90330baf0488a6163a989faa81a58c /fitz
parente8a68936e9dbf3b407e6ccd2c7bc75fdaa7cbbb3 (diff)
downloadmupdf-12799e9be77c85eba11f70523d6ca9112266adae.tar.xz
Prediction filter assumes it's writing to zeroed memory.
The putcomponent function assumes the function has been cleared. Simple fix to clear bytes at the start of each scanline. Problem seen with normal_217.pdf
Diffstat (limited to 'fitz')
-rw-r--r--fitz/filt_predict.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/fitz/filt_predict.c b/fitz/filt_predict.c
index 5fbd7d1d..ebd712fd 100644
--- a/fitz/filt_predict.c
+++ b/fitz/filt_predict.c
@@ -63,9 +63,11 @@ fz_predict_tiff(fz_predict *state, unsigned char *out, unsigned char *in, int le
{
int left[MAXC];
int i, k;
+ const int mask = (1 << state->bpc)-1;
for (k = 0; k < state->colors; k++)
left[k] = 0;
+ memset(out, 0, state->stride);
for (i = 0; i < state->columns; i++)
{
@@ -73,7 +75,7 @@ fz_predict_tiff(fz_predict *state, unsigned char *out, unsigned char *in, int le
{
int a = getcomponent(in, i * state->colors + k, state->bpc);
int b = a + left[k];
- int c = b % (1 << state->bpc);
+ int c = b & mask;
putcomponent(out, i * state->colors + k, state->bpc, c);
left[k] = c;
}