diff options
-rw-r--r-- | source/pdf/pdf-xref.c | 14 |
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) |