aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp')
-rw-r--r--experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp b/experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp
index c32d5ffede..ebc27ad060 100644
--- a/experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp
+++ b/experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp
@@ -358,6 +358,7 @@ void SkPdfNativeDoc::addCrossSectionInfo(int id, int generation, int offset, boo
fObjects[id].fOffset = offset;
fObjects[id].fObj = NULL;
fObjects[id].fResolvedReference = NULL;
+ fObjects[id].fIsReferenceResolved = false;
}
SkPdfNativeObject* SkPdfNativeDoc::readObject(int id/*, int expectedGeneration*/) {
@@ -546,15 +547,22 @@ SkPdfNativeObject* SkPdfNativeDoc::resolveReference(SkPdfNativeObject* ref) {
return NULL;
}
- if (fObjects[id].fResolvedReference != NULL) {
+ if (fObjects[id].fIsReferenceResolved) {
#ifdef PDF_TRACE
printf("\nresolve(%s) = %s\n", ref->toString(0).c_str(), fObjects[id].fResolvedReference->toString(0, ref->toString().size() + 13).c_str());
#endif
+ // TODO(edisonn): for known good documents, assert here THAT THE REFERENCE IS NOT null
return fObjects[id].fResolvedReference;
}
+ // TODO(edisonn): there are pdfs in the crashing suite that cause a stack overflow here unless we check for resolved reference on next line
+ // determine if the pdf is corrupted, or we have a bug here
+
+ // avoids recursive calls
+ fObjects[id].fIsReferenceResolved = true;
+
if (fObjects[id].fObj == NULL) {
fObjects[id].fObj = readObject(id);
}