summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2018-08-29 21:22:18 +0800
committerSebastian Rasmussen <sebras@gmail.com>2018-08-30 18:34:39 +0800
commit6e20012b7a9b6ad8a67b466b32f6fae98a95b11c (patch)
tree4a4aff43db417434c62ee9bbf4443c6fdad7e62b
parent02a4204f815f577da58eacd0c3b4518be03d401b (diff)
downloadmupdf-6e20012b7a9b6ad8a67b466b32f6fae98a95b11c.tar.xz
Remember type of exception upon error while running xobjects.
-rw-r--r--source/pdf/pdf-op-run.c16
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 */