summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2010-08-11 00:33:58 +0000
committerTor Andersson <tor@ghostscript.com>2010-08-11 00:33:58 +0000
commit08d029edaf700e2b1800621e981e4aafb5e4a4e5 (patch)
tree37210c47b3f7d893a2cd772ebd723151c17176eb
parent14c3cd048bb7a4b87a603d35b8d1ceba7920432f (diff)
downloadmupdf-08d029edaf700e2b1800621e981e4aafb5e4a4e5.tar.xz
Cache the result of resourcesuseblending in the object structure to gracefully deal with cyclic dependency chains in resource dictionaries.
-rw-r--r--mupdf/pdf_page.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/mupdf/pdf_page.c b/mupdf/pdf_page.c
index ff812827..949abd4e 100644
--- a/mupdf/pdf_page.c
+++ b/mupdf/pdf_page.c
@@ -118,11 +118,11 @@ pdf_resourcesuseblending(fz_obj *rdb)
int i;
/* stop on cyclic resource dependencies */
- if (fz_dictgets(rdb, ".seen"))
- return 0;
+ if (fz_dictgets(rdb, ".useBM"))
+ return fz_tobool(fz_dictgets(rdb, ".useBM"));
- tmp = fz_newnull();
- fz_dictputs(rdb, ".seen", tmp);
+ tmp = fz_newbool(0);
+ fz_dictputs(rdb, ".useBM", tmp);
fz_dropobj(tmp);
dict = fz_dictgets(rdb, "ExtGState");
@@ -140,11 +140,12 @@ pdf_resourcesuseblending(fz_obj *rdb)
if (pdf_xobjectusesblending(fz_dictgetval(dict, i)))
goto found;
- fz_dictdels(rdb, ".seen");
return 0;
found:
- fz_dictdels(rdb, ".seen");
+ tmp = fz_newbool(1);
+ fz_dictputs(rdb, ".useBM", tmp);
+ fz_dropobj(tmp);
return 1;
}