summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-crypt.c
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2017-09-12 22:26:00 +0800
committerSebastian Rasmussen <sebras@gmail.com>2017-09-13 17:42:00 +0200
commit2707fa9e8e6d17d794330e719dec1b08161fb045 (patch)
tree63b1dfc46e596d0ee6e6f34dec971c62ecbe1f16 /source/pdf/pdf-crypt.c
parent7c8151b6d42f036644a49245ffd6abf02422ac64 (diff)
downloadmupdf-2707fa9e8e6d17d794330e719dec1b08161fb045.tar.xz
Consistently drop filter chain upon error.
Diffstat (limited to 'source/pdf/pdf-crypt.c')
-rw-r--r--source/pdf/pdf-crypt.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/source/pdf/pdf-crypt.c b/source/pdf/pdf-crypt.c
index e7f5f7a9..9f3b05e9 100644
--- a/source/pdf/pdf-crypt.c
+++ b/source/pdf/pdf-crypt.c
@@ -1023,12 +1023,26 @@ pdf_open_crypt(fz_context *ctx, fz_stream *chain, pdf_crypt *crypt, int num, int
fz_stream *
pdf_open_crypt_with_filter(fz_context *ctx, fz_stream *chain, pdf_crypt *crypt, pdf_obj *name, int num, int gen)
{
- if (!pdf_name_eq(ctx, name, PDF_NAME_Identity))
+ fz_var(chain);
+
+ fz_try(ctx)
+ {
+ if (!pdf_name_eq(ctx, name, PDF_NAME_Identity))
+ {
+ pdf_crypt_filter cf;
+ fz_stream *tmp;
+ pdf_parse_crypt_filter(ctx, &cf, crypt, name);
+ tmp = chain;
+ chain = NULL;
+ chain = pdf_open_crypt_imp(ctx, tmp, crypt, &cf, num, gen);
+ }
+ }
+ fz_catch(ctx)
{
- pdf_crypt_filter cf;
- pdf_parse_crypt_filter(ctx, &cf, crypt, name);
- return pdf_open_crypt_imp(ctx, chain, crypt, &cf, num, gen);
+ fz_drop_stream(ctx, chain);
+ fz_rethrow(ctx);
}
+
return chain;
}