summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2004-11-30 06:41:31 +0100
committerTor Andersson <tor@ghostscript.com>2004-11-30 06:41:31 +0100
commit951f2e23a5ec055c358ea8b6b542d9fd1a4668b0 (patch)
tree2a4ceae57ee8267d124f9c1ffea219e02849e718 /filter
parent4008b4d986b700830fad5086df3acfc1028a9e3b (diff)
downloadmupdf-951f2e23a5ec055c358ea8b6b542d9fd1a4668b0.tar.xz
small bugfixes
Diffstat (limited to 'filter')
-rw-r--r--filter/lzwd.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/filter/lzwd.c b/filter/lzwd.c
index 74ddd9ce..95fc462a 100644
--- a/filter/lzwd.c
+++ b/filter/lzwd.c
@@ -109,6 +109,13 @@ static inline fz_error * fillbits(fz_lzwd *lzw, fz_buffer *in)
return nil;
}
+static inline void unstuff(fz_lzwd *lzw, fz_buffer *in)
+{
+ int i = (32 - lzw->bidx) / 8;
+ while (i-- && in->rp > in->bp)
+ in->rp --;
+}
+
fz_error *
fz_processlzwd(fz_filter *filter, fz_buffer *in, fz_buffer *out)
{
@@ -131,6 +138,7 @@ fz_processlzwd(fz_filter *filter, fz_buffer *in, fz_buffer *out)
if (lzw->bidx > 32 - lzw->codebits)
{
out->eof = 1;
+ unstuff(lzw, in);
return fz_iodone;
}
}
@@ -146,6 +154,7 @@ fz_processlzwd(fz_filter *filter, fz_buffer *in, fz_buffer *out)
{
eatbits(lzw, lzw->codebits);
out->eof = 1;
+ unstuff(lzw, in);
return fz_iodone;
}
@@ -162,6 +171,7 @@ fz_processlzwd(fz_filter *filter, fz_buffer *in, fz_buffer *out)
{
eatbits(lzw, oldcodebits + MINBITS);
out->eof = 1;
+ unstuff(lzw, in);
return fz_iodone;
}