diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2017-09-12 22:26:00 +0800 |
---|---|---|
committer | Sebastian Rasmussen <sebras@gmail.com> | 2017-09-13 17:42:00 +0200 |
commit | 2707fa9e8e6d17d794330e719dec1b08161fb045 (patch) | |
tree | 63b1dfc46e596d0ee6e6f34dec971c62ecbe1f16 /source/pdf/pdf-crypt.c | |
parent | 7c8151b6d42f036644a49245ffd6abf02422ac64 (diff) | |
download | mupdf-2707fa9e8e6d17d794330e719dec1b08161fb045.tar.xz |
Consistently drop filter chain upon error.
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; } |