diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2018-03-28 15:17:27 +0200 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2018-04-03 21:21:44 +0200 |
commit | ef3cfb2a49b5be82d56d783f505319754dc65cb8 (patch) | |
tree | f299436312d6230c08289b61e9bad51a4dd31681 /source/pdf/pdf-crypt.c | |
parent | d9f0fdfe1ac986816a3376ee0271f84fb549b0bf (diff) | |
download | mupdf-ef3cfb2a49b5be82d56d783f505319754dc65cb8.tar.xz |
Don't implicitly drop in fz_open_* chained filters.
Diffstat (limited to 'source/pdf/pdf-crypt.c')
-rw-r--r-- | source/pdf/pdf-crypt.c | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/source/pdf/pdf-crypt.c b/source/pdf/pdf-crypt.c index 2e31f356..1056b4fe 100644 --- a/source/pdf/pdf-crypt.c +++ b/source/pdf/pdf-crypt.c @@ -1023,7 +1023,7 @@ pdf_open_crypt_imp(fz_context *ctx, fz_stream *chain, pdf_crypt *crypt, pdf_cryp if (stmf->method == PDF_CRYPT_AESV2 || stmf->method == PDF_CRYPT_AESV3) return fz_open_aesd(ctx, chain, key, len); - return chain; + return fz_keep_stream(ctx, chain); } fz_stream * @@ -1035,27 +1035,13 @@ 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) { - 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) + if (!pdf_name_eq(ctx, name, PDF_NAME_Identity)) { - fz_drop_stream(ctx, chain); - fz_rethrow(ctx); + pdf_crypt_filter cf; + pdf_parse_crypt_filter(ctx, &cf, crypt, name); + return pdf_open_crypt_imp(ctx, chain, crypt, &cf, num, gen); } - - return chain; + return fz_keep_stream(ctx, chain); } void |