summaryrefslogtreecommitdiff
path: root/fitz/stm_read.c
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2011-12-15 21:25:04 +0000
committerRobin Watts <robin.watts@artifex.com>2011-12-15 21:25:04 +0000
commit7992dd366101180c050f37167d91518c52cf025c (patch)
treef85ad161cba95a6355c52c1c97b57b5380cef6d1 /fitz/stm_read.c
parentddbce91f5b70281f84a742845e9228ccfb607756 (diff)
downloadmupdf-7992dd366101180c050f37167d91518c52cf025c.tar.xz
More Memsqueezing fixes.
Diffstat (limited to 'fitz/stm_read.c')
-rw-r--r--fitz/stm_read.c40
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;