summaryrefslogtreecommitdiff
path: root/pdf
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2012-04-05 12:48:19 +0100
committerRobin Watts <robin.watts@artifex.com>2012-04-05 12:48:19 +0100
commit4184ba5d2930b337fddf3ad8e612a88adb08d8c1 (patch)
tree59b4e5f9c5abefb3f93ee235887945a4f1faa597 /pdf
parentb32c5d4f88835ad7b36946f8fcec47e809bcd11b (diff)
downloadmupdf-4184ba5d2930b337fddf3ad8e612a88adb08d8c1.tar.xz
Don't unlock a lock we don't own.
While debugging Bug 692943, I spotted a case where we can attempt to unlock the file while we don't hold the file lock due to an error being thrown while we momentarily drop that lock. Simple solution is to add a new fz_try()/fz_catch() to retake the lock in such an error circumstance.
Diffstat (limited to 'pdf')
-rw-r--r--pdf/pdf_repair.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/pdf/pdf_repair.c b/pdf/pdf_repair.c
index fda1e6b5..a51b9631 100644
--- a/pdf/pdf_repair.c
+++ b/pdf/pdf_repair.c
@@ -390,8 +390,18 @@ pdf_repair_xref(pdf_document *xref, pdf_lexbuf *buf)
if (list[i].stm_len >= 0)
{
fz_unlock(ctx, FZ_LOCK_FILE);
- dict = pdf_load_object(xref, list[i].num, list[i].gen);
- fz_lock(ctx, FZ_LOCK_FILE);
+ fz_try(ctx)
+ {
+ dict = pdf_load_object(xref, list[i].num, list[i].gen);
+ }
+ fz_always(ctx)
+ {
+ fz_lock(ctx, FZ_LOCK_FILE);
+ }
+ fz_catch(ctx)
+ {
+ fz_rethrow(ctx);
+ }
/* RJW: "cannot load stream object (%d %d R)", list[i].num, list[i].gen */
length = pdf_new_int(ctx, list[i].stm_len);