summaryrefslogtreecommitdiff
path: root/source/pdf
diff options
context:
space:
mode:
Diffstat (limited to 'source/pdf')
-rw-r--r--source/pdf/pdf-store.c18
-rw-r--r--source/pdf/pdf-xref.c2
2 files changed, 19 insertions, 1 deletions
diff --git a/source/pdf/pdf-store.c b/source/pdf/pdf-store.c
index fa5cf76e..ccedbe0b 100644
--- a/source/pdf/pdf-store.c
+++ b/source/pdf/pdf-store.c
@@ -54,6 +54,8 @@ void
pdf_store_item(fz_context *ctx, pdf_obj *key, void *val, size_t itemsize)
{
void *existing;
+
+ assert(pdf_is_array(ctx, key) || pdf_is_dict(ctx, key) || pdf_is_indirect(ctx, key));
existing = fz_store_item(ctx, key, val, itemsize, &pdf_obj_store_type);
assert(existing == NULL);
(void)existing; /* Silence warning in release builds */
@@ -70,3 +72,19 @@ pdf_remove_item(fz_context *ctx, fz_store_drop_fn *drop, pdf_obj *key)
{
fz_remove_item(ctx, drop, key, &pdf_obj_store_type);
}
+
+static int
+pdf_filter_store(fz_context *ctx, void *doc_, void *key)
+{
+ pdf_document *doc = (pdf_document *)doc_;
+ pdf_obj *obj = (pdf_obj *)key;
+ pdf_document *key_doc = pdf_get_bound_document(ctx, obj);
+
+ return (doc == key_doc);
+}
+
+void
+pdf_empty_store(fz_context *ctx, pdf_document *doc)
+{
+ fz_filter_store(ctx, pdf_filter_store, doc, &pdf_obj_store_type);
+}
diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c
index 30904d78..2d6bc1e0 100644
--- a/source/pdf/pdf-xref.c
+++ b/source/pdf/pdf-xref.c
@@ -1610,7 +1610,7 @@ pdf_drop_document_imp(fz_context *ctx, pdf_document *doc)
pdf_drop_ocg(ctx, doc->ocg);
- fz_empty_store(ctx);
+ pdf_empty_store(ctx, doc);
pdf_lexbuf_fin(ctx, &doc->lexbuf.base);