From ef3cfb2a49b5be82d56d783f505319754dc65cb8 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Wed, 28 Mar 2018 15:17:27 +0200 Subject: Don't implicitly drop in fz_open_* chained filters. --- source/pdf/pdf-crypt.c | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) (limited to 'source/pdf/pdf-crypt.c') 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 -- cgit v1.2.3