diff options
Diffstat (limited to 'source/pdf/pdf-crypt.c')
-rw-r--r-- | source/pdf/pdf-crypt.c | 22 |
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; } |