diff options
author | Robin Watts <robin.watts@artifex.com> | 2011-12-15 21:25:04 +0000 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2011-12-15 21:25:04 +0000 |
commit | 7992dd366101180c050f37167d91518c52cf025c (patch) | |
tree | f85ad161cba95a6355c52c1c97b57b5380cef6d1 /fitz/stm_read.c | |
parent | ddbce91f5b70281f84a742845e9228ccfb607756 (diff) | |
download | mupdf-7992dd366101180c050f37167d91518c52cf025c.tar.xz |
More Memsqueezing fixes.
Diffstat (limited to 'fitz/stm_read.c')
-rw-r--r-- | fitz/stm_read.c | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/fitz/stm_read.c b/fitz/stm_read.c index 9f9fc302..3d76d51a 100644 --- a/fitz/stm_read.c +++ b/fitz/stm_read.c @@ -94,27 +94,37 @@ fz_read_all(fz_stream *stm, int initial) int n; fz_context *ctx = stm->ctx; - if (initial < 1024) - initial = 1024; + fz_var(buf); - buf = fz_new_buffer(ctx, initial); - - while (1) + fz_try(ctx) { - if (buf->len == buf->cap) - fz_grow_buffer(ctx, buf); + if (initial < 1024) + initial = 1024; + + buf = fz_new_buffer(ctx, initial); - if (buf->len / 200 > initial) + while (1) { - fz_drop_buffer(ctx, buf); - fz_throw(ctx, "compression bomb detected"); - } + if (buf->len == buf->cap) + fz_grow_buffer(ctx, buf); - n = fz_read(stm, buf->data + buf->len, buf->cap - buf->len); - if (n == 0) - break; + if (buf->len / 200 > initial) + { + fz_drop_buffer(ctx, buf); + fz_throw(ctx, "compression bomb detected"); + } + + n = fz_read(stm, buf->data + buf->len, buf->cap - buf->len); + if (n == 0) + break; - buf->len += n; + buf->len += n; + } + } + fz_catch(ctx) + { + fz_drop_buffer(ctx, buf); + fz_rethrow(ctx); } return buf; |