summaryrefslogtreecommitdiff
path: root/fitz/filt_basic.c
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@hotmail.com>2010-08-02 00:19:02 +0000
committerSebastian Rasmussen <sebras@hotmail.com>2010-08-02 00:19:02 +0000
commit2a16ff0604b6ba2b9a5bdf4d1912d7c09e5882a5 (patch)
tree6611665442ed697badf0fd7f1fd4d92c721bd0cd /fitz/filt_basic.c
parent28a4c167d90f07af0a77f71c397303731c00abe1 (diff)
downloadmupdf-2a16ff0604b6ba2b9a5bdf4d1912d7c09e5882a5.tar.xz
Place last bytes of ASCII85 and AES decoded data at the correct buffer location.
Diffstat (limited to 'fitz/filt_basic.c')
-rw-r--r--fitz/filt_basic.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/fitz/filt_basic.c b/fitz/filt_basic.c
index bac3dc23..2faf2dda 100644
--- a/fitz/filt_basic.c
+++ b/fitz/filt_basic.c
@@ -230,20 +230,20 @@ reada85d(fz_stream *stm, unsigned char *buf, int len)
return fz_throw("partial final byte in a85d");
case 2:
word = word * (85 * 85 * 85) + 0xffffff;
- state->buf[0] = word >> 24;
+ state->buf[3] = word >> 24;
state->remain = 1;
break;
case 3:
word = word * (85 * 85) + 0xffff;
- state->buf[0] = word >> 24;
- state->buf[1] = word >> 16;
+ state->buf[2] = word >> 24;
+ state->buf[3] = word >> 16;
state->remain = 2;
break;
case 4:
word = word * 85 + 0xff;
- state->buf[0] = word >> 24;
- state->buf[1] = word >> 16;
- state->buf[2] = word >> 8;
+ state->buf[1] = word >> 24;
+ state->buf[2] = word >> 16;
+ state->buf[3] = word >> 8;
state->remain = 3;
break;
}
@@ -461,6 +461,9 @@ readaesd(fz_stream *stm, unsigned char *buf, int len)
if (pad < 1 || pad > 16)
return fz_throw("aes padding out of range: %d", pad);
state->remain -= pad;
+ memmove(&state->buf[16 - state->remain],
+ &state->buf[0],
+ state->remain);
}
while (state->remain > 0 && p < buf + len)