diff options
author | Sebastian Rasmussen <sebras@hotmail.com> | 2010-08-02 00:19:02 +0000 |
---|---|---|
committer | Sebastian Rasmussen <sebras@hotmail.com> | 2010-08-02 00:19:02 +0000 |
commit | 2a16ff0604b6ba2b9a5bdf4d1912d7c09e5882a5 (patch) | |
tree | 6611665442ed697badf0fd7f1fd4d92c721bd0cd | |
parent | 28a4c167d90f07af0a77f71c397303731c00abe1 (diff) | |
download | mupdf-2a16ff0604b6ba2b9a5bdf4d1912d7c09e5882a5.tar.xz |
Place last bytes of ASCII85 and AES decoded data at the correct buffer location.
-rw-r--r-- | fitz/filt_basic.c | 15 |
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) |