diff options
author | 2013-08-22 15:37:21 +0000 | |
---|---|---|
committer | 2013-08-22 15:37:21 +0000 | |
commit | f68aed33819cbc98a95edeadde1da9303eca7fb2 (patch) | |
tree | 7b08f5ae985b4393cd21bee249d0e6c61c87eed3 /experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp | |
parent | bd2f30132e1433b4dd1276e59a03fc70fd8209d7 (diff) |
pdfviewer: when q start, and an operator is called, it should not be able to see operands before q. nest/unnest are similar with pop/push - simulates a stack of stacks, in a single stack
Review URL: https://codereview.chromium.org/23033022
git-svn-id: http://skia.googlecode.com/svn/trunk@10873 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp')
-rw-r--r-- | experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp | 10 |
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); } |