summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/pdf/pdf-xref.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c
index 723b543c0..ed09094cb 100644
--- a/source/pdf/pdf-xref.c
+++ b/source/pdf/pdf-xref.c
@@ -1576,6 +1576,19 @@ pdf_load_obj_stm(fz_context *ctx, pdf_document *doc, int num, pdf_lexbuf *buf, i
1576 { 1576 {
1577 objstm = pdf_load_object(ctx, doc, num); 1577 objstm = pdf_load_object(ctx, doc, num);
1578 1578
1579 if (pdf_obj_marked(ctx, objstm))
1580 fz_throw(ctx, FZ_ERROR_GENERIC, "recursive object stream lookup");
1581 }
1582 fz_catch(ctx)
1583 {
1584 pdf_drop_obj(ctx, objstm);
1585 fz_rethrow(ctx);
1586 }
1587
1588 fz_try(ctx)
1589 {
1590 pdf_mark_obj(ctx, objstm);
1591
1579 count = pdf_to_int(ctx, pdf_dict_get(ctx, objstm, PDF_NAME_N)); 1592 count = pdf_to_int(ctx, pdf_dict_get(ctx, objstm, PDF_NAME_N));
1580 first = pdf_to_int(ctx, pdf_dict_get(ctx, objstm, PDF_NAME_First)); 1593 first = pdf_to_int(ctx, pdf_dict_get(ctx, objstm, PDF_NAME_First));
1581 1594
@@ -1655,6 +1668,7 @@ pdf_load_obj_stm(fz_context *ctx, pdf_document *doc, int num, pdf_lexbuf *buf, i
1655 fz_drop_stream(ctx, stm); 1668 fz_drop_stream(ctx, stm);
1656 fz_free(ctx, ofsbuf); 1669 fz_free(ctx, ofsbuf);
1657 fz_free(ctx, numbuf); 1670 fz_free(ctx, numbuf);
1671 pdf_unmark_obj(ctx, objstm);
1658 pdf_drop_obj(ctx, objstm); 1672 pdf_drop_obj(ctx, objstm);
1659 } 1673 }
1660 fz_catch(ctx) 1674 fz_catch(ctx)