summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/fpdfapi/parser/cpdf_hint_tables.cpp5
-rw-r--r--fpdfsdk/fpdf_view_embeddertest.cpp9
-rw-r--r--testing/resources/linearized_bug_1055.pdfbin0 -> 11390 bytes
3 files changed, 12 insertions, 2 deletions
diff --git a/core/fpdfapi/parser/cpdf_hint_tables.cpp b/core/fpdfapi/parser/cpdf_hint_tables.cpp
index c9123d4b97..381b160233 100644
--- a/core/fpdfapi/parser/cpdf_hint_tables.cpp
+++ b/core/fpdfapi/parser/cpdf_hint_tables.cpp
@@ -418,8 +418,9 @@ CPDF_DataAvail::DocAvailStatus CPDF_HintTables::CheckPage(uint32_t index) {
return CPDF_DataAvail::DataError;
if (!m_pValidator->CheckDataRangeAndRequestIfUnavailable(
- m_szPageOffsetArray[index], dwLength))
+ m_szPageOffsetArray[index], dwLength)) {
return CPDF_DataAvail::DataNotAvailable;
+ }
// Download data of shared objects in the page.
uint32_t offset = 0;
@@ -435,7 +436,7 @@ CPDF_DataAvail::DocAvailStatus CPDF_HintTables::CheckPage(uint32_t index) {
for (uint32_t j = 0; j < m_dwNSharedObjsArray[index]; ++j) {
dwIndex = m_dwIdentifierArray[offset + j];
if (dwIndex >= m_dwSharedObjNumArray.size())
- return CPDF_DataAvail::DataNotAvailable;
+ continue;
dwObjNum = m_dwSharedObjNumArray[dwIndex];
if (dwObjNum >= static_cast<uint32_t>(nFirstPageObjNum) &&
diff --git a/fpdfsdk/fpdf_view_embeddertest.cpp b/fpdfsdk/fpdf_view_embeddertest.cpp
index 0bfa1a30b2..8d2cd3af1b 100644
--- a/fpdfsdk/fpdf_view_embeddertest.cpp
+++ b/fpdfsdk/fpdf_view_embeddertest.cpp
@@ -390,6 +390,15 @@ TEST_F(FPDFViewEmbeddertest, Hang_360) {
EXPECT_FALSE(OpenDocument("bug_360.pdf"));
}
+// Deliberately damaged version of linearized.pdf with bad data in the shared
+// object hint table.
+TEST_F(FPDFViewEmbeddertest, Hang_1055) {
+ EXPECT_TRUE(OpenDocumentLinearized("linearized_bug_1055.pdf"));
+ int version;
+ EXPECT_TRUE(FPDF_GetFileVersion(document(), &version));
+ EXPECT_EQ(16, version);
+}
+
void FPDFViewEmbeddertest::TestRenderPageBitmapWithMatrix(
FPDF_PAGE page,
const int bitmap_width,
diff --git a/testing/resources/linearized_bug_1055.pdf b/testing/resources/linearized_bug_1055.pdf
new file mode 100644
index 0000000000..2f0f493b42
--- /dev/null
+++ b/testing/resources/linearized_bug_1055.pdf
Binary files differ