diff options
Diffstat (limited to 'app-office/kword/files/koffice-xpdf-CVE-2007-0104.diff')
-rw-r--r-- | app-office/kword/files/koffice-xpdf-CVE-2007-0104.diff | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/app-office/kword/files/koffice-xpdf-CVE-2007-0104.diff b/app-office/kword/files/koffice-xpdf-CVE-2007-0104.diff deleted file mode 100644 index f5e51a1c..00000000 --- a/app-office/kword/files/koffice-xpdf-CVE-2007-0104.diff +++ /dev/null @@ -1,74 +0,0 @@ ------------------------------------------------------------------------- -r622463 | aacid | 2007-01-11 23:05:54 +0100 (Thu, 11 Jan 2007) | 2 lines -Changed paths: - M /branches/koffice/1.6/koffice/filters/kword/pdf/xpdf/xpdf/Catalog.cc - M /branches/koffice/1.6/koffice/filters/kword/pdf/xpdf/xpdf/Catalog.h - -Commiting the patch agreed between kpdf and poppler developers to fix MOAB-06-01-2007 issue. - ------------------------------------------------------------------------- -Index: filters/kword/pdf/xpdf/xpdf/Catalog.cc -=================================================================== ---- filters/kword/pdf/xpdf/xpdf/Catalog.cc (revision 622462) -+++ filters/kword/pdf/xpdf/xpdf/Catalog.cc (revision 622463) -@@ -24,6 +24,12 @@ - #include "Link.h" - #include "Catalog.h" - -+// This define is used to limit the depth of recursive readPageTree calls -+// This is needed because the page tree nodes can reference their parents -+// leaving us in an infinite loop -+// Most sane pdf documents don't have a call depth higher than 10 -+#define MAX_CALL_DEPTH 1000 -+ - //------------------------------------------------------------------------ - // Catalog - //------------------------------------------------------------------------ -@@ -77,7 +83,7 @@ Catalog::Catalog(XRef *xrefA) { - pageRefs[i].num = -1; - pageRefs[i].gen = -1; - } -- numPages = readPageTree(pagesDict.getDict(), NULL, 0); -+ numPages = readPageTree(pagesDict.getDict(), NULL, 0, 0); - if (numPages != numPages0) { - error(-1, "Page count in top-level pages object is incorrect"); - } -@@ -171,7 +177,7 @@ GString *Catalog::readMetadata() { - return s; - } - --int Catalog::readPageTree(Dict *pagesDict, PageAttrs *attrs, int start) { -+int Catalog::readPageTree(Dict *pagesDict, PageAttrs *attrs, int start, int callDepth) { - Object kids; - Object kid; - Object kidRef; -@@ -221,9 +227,13 @@ int Catalog::readPageTree(Dict *pagesDic - // This should really be isDict("Pages"), but I've seen at least one - // PDF file where the /Type entry is missing. - } else if (kid.isDict()) { -- if ((start = readPageTree(kid.getDict(), attrs1, start)) -- < 0) -- goto err2; -+ if (callDepth > MAX_CALL_DEPTH) { -+ error(-1, "Limit of %d recursive calls reached while reading the page tree. If your document is correct and not a test to try to force a crash, please report a bug.", MAX_CALL_DEPTH); -+ } else { -+ if ((start = readPageTree(kid.getDict(), attrs1, start, callDepth + 1)) -+ < 0) -+ goto err2; -+ } - } else { - error(-1, "Kid object (page %d) is wrong type (%s)", - start+1, kid.getTypeName()); -Index: filters/kword/pdf/xpdf/xpdf/Catalog.h -=================================================================== ---- filters/kword/pdf/xpdf/xpdf/Catalog.h (revision 622462) -+++ filters/kword/pdf/xpdf/xpdf/Catalog.h (revision 622463) -@@ -82,7 +82,7 @@ private: - Object outline; // outline dictionary - GBool ok; // true if catalog is valid - -- int readPageTree(Dict *pages, PageAttrs *attrs, int start); -+ int readPageTree(Dict *pages, PageAttrs *attrs, int start, int callDepth); - Object *findDestInTree(Object *tree, GString *name, Object *obj); - }; - |