pdfviewer: ignore more bad stauff in pdfs
Review URL: https://codereview.chromium.org/18112023
git-svn-id: http://skia.googlecode.com/svn/trunk@9990 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp b/experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp
index 7a8ba6f..8bd14cc 100644
--- a/experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp
+++ b/experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp
@@ -103,14 +103,17 @@
if (fRootCatalogRef) {
fRootCatalog = (SkPdfCatalogDictionary*)resolveReference(fRootCatalogRef);
- SkPdfPageTreeNodeDictionary* tree = fRootCatalog->Pages(this);
-
- fillPages(tree);
- } else {
- // TODO(edisonn): corrupted pdf, read it from beginning and rebuild (xref, trailer, or just reall all objects)
- // 0 pages
+ if (fRootCatalog->isDictionary() && fRootCatalog->valid()) {
+ SkPdfPageTreeNodeDictionary* tree = fRootCatalog->Pages(this);
+ if (tree && tree->isDictionary() && tree->valid()) {
+ fillPages(tree);
+ }
+ }
}
+ // TODO(edisonn): corrupted pdf, read it from beginning and rebuild (xref, trailer, or just reall all objects)
+ // 0 pages
+
// now actually read all objects if we want, or do it lazyly
// and resolve references?... or not ...
}
diff --git a/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp b/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp
index 1288132..604e9fb 100644
--- a/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp
+++ b/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp
@@ -69,7 +69,8 @@
array->appendInArray(newObj);
}
// TODO(edisonn): report not reached, we should never get here
- SkASSERT(false);
+ // TODO(edisonn): there might be a bug here, enable an assert and run it on files
+ // or it might be that the files were actually corrupted
return start;
}
@@ -170,6 +171,8 @@
in++;
break;
}
+ } else {
+ in++;
}
} else {
// TODO(edisonn): perf, avoid copy into itself, maybe first do a simple scan until found backslash ?