diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2018-08-29 21:22:18 +0800 |
---|---|---|
committer | Sebastian Rasmussen <sebras@gmail.com> | 2018-08-30 18:34:39 +0800 |
commit | 6e20012b7a9b6ad8a67b466b32f6fae98a95b11c (patch) | |
tree | 4a4aff43db417434c62ee9bbf4443c6fdad7e62b | |
parent | 02a4204f815f577da58eacd0c3b4518be03d401b (diff) | |
download | mupdf-6e20012b7a9b6ad8a67b466b32f6fae98a95b11c.tar.xz |
Remember type of exception upon error while running xobjects.
-rw-r--r-- | source/pdf/pdf-op-run.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/source/pdf/pdf-op-run.c b/source/pdf/pdf-op-run.c index 6367fff9..1ad0e610 100644 --- a/source/pdf/pdf-op-run.c +++ b/source/pdf/pdf-op-run.c @@ -1194,6 +1194,7 @@ pdf_run_xobject(fz_context *ctx, pdf_run_processor *proc, pdf_obj *xobj, pdf_obj int gparent_save; fz_matrix gparent_save_ctm; int cleanup_state = 0; + int err = FZ_ERROR_NONE; char errmess[256] = ""; pdf_obj *resources; fz_rect xobj_bbox; @@ -1314,6 +1315,7 @@ pdf_run_xobject(fz_context *ctx, pdf_run_processor *proc, pdf_obj *xobj, pdf_obj fz_catch(ctx) { /* Postpone the problem */ + err = fz_caught(ctx); strcpy(errmess, fz_caught_message(ctx)); } } @@ -1343,8 +1345,9 @@ pdf_run_xobject(fz_context *ctx, pdf_run_processor *proc, pdf_obj *xobj, pdf_obj fz_catch(ctx) { /* Postpone the problem */ - if (errmess[0]) - fz_warn(ctx, "%s", errmess); + if (err) + fz_warn(ctx, "ignoring error: %s", errmess); + err = fz_caught(ctx); strcpy(errmess, fz_caught_message(ctx)); } } @@ -1357,8 +1360,9 @@ pdf_run_xobject(fz_context *ctx, pdf_run_processor *proc, pdf_obj *xobj, pdf_obj fz_catch(ctx) { /* Postpone the problem */ - if (errmess[0]) - fz_warn(ctx, "%s", errmess); + if (err) + fz_warn(ctx, "ignoring error: %s", errmess); + err = fz_caught(ctx); strcpy(errmess, fz_caught_message(ctx)); } } @@ -1378,8 +1382,8 @@ pdf_run_xobject(fz_context *ctx, pdf_run_processor *proc, pdf_obj *xobj, pdf_obj } /* Rethrow postponed errors */ - if (errmess[0]) - fz_throw(ctx, FZ_ERROR_GENERIC, "%s", errmess); + if (err) + fz_throw(ctx, err, "%s", errmess); } /* general graphics state */ |