summaryrefslogtreecommitdiff
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
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
-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;
}