diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/fpdfapi/fpdf_page/fpdf_page_parser.cpp | 8 | ||||
-rw-r--r-- | core/fpdfapi/fpdf_parser/cpdf_array.cpp | 6 | ||||
-rw-r--r-- | core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp | 14 | ||||
-rw-r--r-- | core/fpdfapi/fpdf_parser/cpdf_object.cpp | 4 | ||||
-rw-r--r-- | core/fpdfapi/fpdf_parser/cpdf_object_unittest.cpp | 34 | ||||
-rw-r--r-- | core/fpdfapi/fpdf_parser/include/cpdf_array.h | 1 | ||||
-rw-r--r-- | core/fpdfapi/fpdf_parser/include/cpdf_object.h | 1 | ||||
-rw-r--r-- | core/fpdfdoc/cpvt_generateap.cpp | 22 | ||||
-rw-r--r-- | core/fpdfdoc/doc_formfield.cpp | 51 |
9 files changed, 51 insertions, 90 deletions
diff --git a/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp b/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp index 4a7b6ad403..b30006bf35 100644 --- a/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp +++ b/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp @@ -697,7 +697,7 @@ void CPDF_StreamContentParser::Handle_SetColorSpace_Stroke() { } void CPDF_StreamContentParser::Handle_SetDash() { - CPDF_Array* pArray = GetObject(1) ? GetObject(1)->GetArray() : nullptr; + CPDF_Array* pArray = ToArray(GetObject(1)); if (!pArray) return; @@ -1305,10 +1305,10 @@ void CPDF_StreamContentParser::Handle_ShowText() { } void CPDF_StreamContentParser::Handle_ShowText_Positioning() { - CPDF_Array* pArray = GetObject(0) ? GetObject(0)->GetArray() : NULL; - if (!pArray) { + CPDF_Array* pArray = ToArray(GetObject(0)); + if (!pArray) return; - } + size_t n = pArray->GetCount(); size_t nsegs = 0; for (size_t i = 0; i < n; i++) { diff --git a/core/fpdfapi/fpdf_parser/cpdf_array.cpp b/core/fpdfapi/fpdf_parser/cpdf_array.cpp index d588f339a7..20073772b7 100644 --- a/core/fpdfapi/fpdf_parser/cpdf_array.cpp +++ b/core/fpdfapi/fpdf_parser/cpdf_array.cpp @@ -25,12 +25,6 @@ CPDF_Object::Type CPDF_Array::GetType() const { return ARRAY; } -CPDF_Array* CPDF_Array::GetArray() const { - // The method should be made non-const if we want to not be const. - // See bug #234. - return const_cast<CPDF_Array*>(this); -} - bool CPDF_Array::IsArray() const { return true; } diff --git a/core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp b/core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp index e47d4244ac..f371e673ed 100644 --- a/core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp +++ b/core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp @@ -151,7 +151,7 @@ FX_BOOL CPDF_DataAvail::IsObjectsAvail( int32_t type = pObj->GetType(); switch (type) { case CPDF_Object::ARRAY: { - CPDF_Array* pArray = pObj->GetArray(); + CPDF_Array* pArray = pObj->AsArray(); for (size_t k = 0; k < pArray->GetCount(); ++k) new_obj_array.Add(pArray->GetObjectAt(k)); } break; @@ -509,13 +509,11 @@ FX_BOOL CPDF_DataAvail::CheckPage(IPDF_DataAvail::DownloadHints* pHints) { continue; } - if (pObj->IsArray()) { - CPDF_Array* pArray = pObj->GetArray(); - if (pArray) { - for (size_t j = 0; j < pArray->GetCount(); ++j) { - if (CPDF_Reference* pRef = ToReference(pArray->GetObjectAt(j))) - UnavailObjList.Add(pRef->GetRefObjNum()); - } + CPDF_Array* pArray = ToArray(pObj); + if (pArray) { + for (CPDF_Object* pArrayObj : *pArray) { + if (CPDF_Reference* pRef = ToReference(pArrayObj)) + UnavailObjList.Add(pRef->GetRefObjNum()); } } diff --git a/core/fpdfapi/fpdf_parser/cpdf_object.cpp b/core/fpdfapi/fpdf_parser/cpdf_object.cpp index 86b9449cf8..ec967d1032 100644 --- a/core/fpdfapi/fpdf_parser/cpdf_object.cpp +++ b/core/fpdfapi/fpdf_parser/cpdf_object.cpp @@ -49,10 +49,6 @@ CPDF_Dictionary* CPDF_Object::GetDict() const { return nullptr; } -CPDF_Array* CPDF_Object::GetArray() const { - return nullptr; -} - void CPDF_Object::SetString(const CFX_ByteString& str) { ASSERT(FALSE); } diff --git a/core/fpdfapi/fpdf_parser/cpdf_object_unittest.cpp b/core/fpdfapi/fpdf_parser/cpdf_object_unittest.cpp index d3dc5257a3..a77f022c40 100644 --- a/core/fpdfapi/fpdf_parser/cpdf_object_unittest.cpp +++ b/core/fpdfapi/fpdf_parser/cpdf_object_unittest.cpp @@ -183,7 +183,7 @@ class PDFObjectsTest : public testing::Test { }; TEST_F(PDFObjectsTest, GetString) { - const char* direct_obj_results[] = { + const char* const direct_obj_results[] = { "false", "true", "1245", "9.00345", "A simple test", "\t\n", "space", "", "", "", ""}; // Check for direct objects. @@ -191,15 +191,15 @@ TEST_F(PDFObjectsTest, GetString) { EXPECT_STREQ(direct_obj_results[i], m_DirectObjs[i]->GetString().c_str()); // Check indirect references. - const char* indirect_obj_results[] = {"true", "1245", "\t\n", "space", - "", "", ""}; + const char* const indirect_obj_results[] = {"true", "1245", "\t\n", "space", + "", "", ""}; for (size_t i = 0; i < m_RefObjs.size(); ++i) { EXPECT_STREQ(indirect_obj_results[i], m_RefObjs[i]->GetString().c_str()); } } TEST_F(PDFObjectsTest, GetUnicodeText) { - const wchar_t* direct_obj_results[] = { + const wchar_t* const direct_obj_results[] = { L"", L"", L"", L"", L"A simple test", L"\t\n", L"space", L"", L"", L"abcdefghijklmnopqrstuvwxyz", L""}; @@ -240,7 +240,7 @@ TEST_F(PDFObjectsTest, GetInteger) { } TEST_F(PDFObjectsTest, GetDict) { - const CPDF_Dictionary* direct_obj_results[] = { + const CPDF_Dictionary* const direct_obj_results[] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, m_DictObj, m_StreamDictObj, nullptr}; // Check for direct objects. @@ -248,23 +248,23 @@ TEST_F(PDFObjectsTest, GetDict) { EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->GetDict()); // Check indirect references. - const CPDF_Dictionary* indirect_obj_results[] = { + const CPDF_Dictionary* const indirect_obj_results[] = { nullptr, nullptr, nullptr, nullptr, nullptr, m_DictObj, m_StreamDictObj}; for (size_t i = 0; i < m_RefObjs.size(); ++i) EXPECT_EQ(indirect_obj_results[i], m_RefObjs[i]->GetDict()); } TEST_F(PDFObjectsTest, GetArray) { - const CPDF_Array* direct_obj_results[] = { + const CPDF_Array* const direct_obj_results[] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, m_ArrayObj, nullptr, nullptr, nullptr}; // Check for direct objects. for (size_t i = 0; i < m_DirectObjs.size(); ++i) - EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->GetArray()); + EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->AsArray()); // Check indirect references. for (const auto& it : m_RefObjs) - EXPECT_EQ(nullptr, it->GetArray()); + EXPECT_EQ(nullptr, it->AsArray()); } TEST_F(PDFObjectsTest, Clone) { @@ -305,8 +305,8 @@ TEST_F(PDFObjectsTest, SetString) { // Check for direct objects. const char* const set_values[] = {"true", "fake", "3.125f", "097", "changed", "", "NewName"}; - const char* expected[] = {"true", "false", "3.125", "97", - "changed", "", "NewName"}; + const char* const expected[] = {"true", "false", "3.125", "97", + "changed", "", "NewName"}; for (size_t i = 0; i < FX_ArraySize(set_values); ++i) { m_DirectObjs[i]->SetString(set_values[i]); EXPECT_STREQ(expected[i], m_DirectObjs[i]->GetString().c_str()); @@ -424,7 +424,7 @@ TEST(PDFArrayTest, GetRect) { TEST(PDFArrayTest, GetTypeAt) { { // Boolean array. - bool vals[] = {true, false, false, true, true}; + const bool vals[] = {true, false, false, true, true}; ScopedArray arr(new CPDF_Array); for (size_t i = 0; i < FX_ArraySize(vals); ++i) arr->InsertAt(i, new CPDF_Boolean(vals[i])); @@ -441,7 +441,7 @@ TEST(PDFArrayTest, GetTypeAt) { } { // Integer array. - int vals[] = {10, 0, -345, 2089345456, -1000000000, 567, 93658767}; + const int vals[] = {10, 0, -345, 2089345456, -1000000000, 567, 93658767}; ScopedArray arr(new CPDF_Array); for (size_t i = 0; i < FX_ArraySize(vals); ++i) arr->InsertAt(i, new CPDF_Number(vals[i])); @@ -459,10 +459,10 @@ TEST(PDFArrayTest, GetTypeAt) { } { // Float array. - float vals[] = {0.0f, 0, 10, 10.0f, 0.0345f, - 897.34f, -2.5f, -1.0f, -345.0f, -0.0f}; - const char* expected_str[] = {"0", "0", "10", "10", "0.0345", - "897.34", "-2.5", "-1", "-345", "0"}; + const float vals[] = {0.0f, 0, 10, 10.0f, 0.0345f, + 897.34f, -2.5f, -1.0f, -345.0f, -0.0f}; + const char* const expected_str[] = { + "0", "0", "10", "10", "0.0345", "897.34", "-2.5", "-1", "-345", "0"}; ScopedArray arr(new CPDF_Array); for (size_t i = 0; i < FX_ArraySize(vals); ++i) { arr->InsertAt(i, new CPDF_Number(vals[i])); diff --git a/core/fpdfapi/fpdf_parser/include/cpdf_array.h b/core/fpdfapi/fpdf_parser/include/cpdf_array.h index dfe03b9d70..0629046d9e 100644 --- a/core/fpdfapi/fpdf_parser/include/cpdf_array.h +++ b/core/fpdfapi/fpdf_parser/include/cpdf_array.h @@ -24,7 +24,6 @@ class CPDF_Array : public CPDF_Object { // CPDF_Object. Type GetType() const override; CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const override; - CPDF_Array* GetArray() const override; bool IsArray() const override; CPDF_Array* AsArray() override; const CPDF_Array* AsArray() const override; diff --git a/core/fpdfapi/fpdf_parser/include/cpdf_object.h b/core/fpdfapi/fpdf_parser/include/cpdf_object.h index c0c442157f..0d2e87e9f1 100644 --- a/core/fpdfapi/fpdf_parser/include/cpdf_object.h +++ b/core/fpdfapi/fpdf_parser/include/cpdf_object.h @@ -50,7 +50,6 @@ class CPDF_Object { virtual FX_FLOAT GetNumber() const; virtual int GetInteger() const; virtual CPDF_Dictionary* GetDict() const; - virtual CPDF_Array* GetArray() const; virtual void SetString(const CFX_ByteString& str); diff --git a/core/fpdfdoc/cpvt_generateap.cpp b/core/fpdfdoc/cpvt_generateap.cpp index aa49f79c12..db2ee6c01d 100644 --- a/core/fpdfdoc/cpvt_generateap.cpp +++ b/core/fpdfdoc/cpvt_generateap.cpp @@ -344,15 +344,10 @@ FX_BOOL GenerateWidgetAP(CPDF_Document* pDoc, pDoc, pStreamDict ? pStreamDict->GetDictBy("Resources") : nullptr, pDefFont, sFontName.Right(sFontName.GetLength() - 1)); CPDF_VariableText::Provider prd(&map); - CPDF_Array* pOpts = FPDF_GetFieldAttr(pAnnotDict, "Opt") - ? FPDF_GetFieldAttr(pAnnotDict, "Opt")->GetArray() - : nullptr; - CPDF_Array* pSels = FPDF_GetFieldAttr(pAnnotDict, "I") - ? FPDF_GetFieldAttr(pAnnotDict, "I")->GetArray() - : nullptr; - int32_t nTop = FPDF_GetFieldAttr(pAnnotDict, "TI") - ? FPDF_GetFieldAttr(pAnnotDict, "TI")->GetInteger() - : 0; + CPDF_Array* pOpts = ToArray(FPDF_GetFieldAttr(pAnnotDict, "Opt")); + CPDF_Array* pSels = ToArray(FPDF_GetFieldAttr(pAnnotDict, "I")); + CPDF_Object* pTi = FPDF_GetFieldAttr(pAnnotDict, "TI"); + int32_t nTop = pTi ? pTi->GetInteger() : 0; CFX_ByteTextBuf sBody; if (pOpts) { FX_FLOAT fy = rcBody.top; @@ -415,11 +410,10 @@ FX_BOOL GenerateWidgetAP(CPDF_Document* pDoc, } } if (sBody.GetSize() > 0) { - sAppStream << "/Tx BMC\n" - << "q\n"; - sAppStream << rcBody.left << " " << rcBody.bottom << " " - << rcBody.Width() << " " << rcBody.Height() << " re\nW\nn\n"; - sAppStream << sBody.AsStringC() << "Q\nEMC\n"; + sAppStream << "/Tx BMC\nq\n" + << rcBody.left << " " << rcBody.bottom << " " + << rcBody.Width() << " " << rcBody.Height() << " re\nW\nn\n" + << sBody.AsStringC() << "Q\nEMC\n"; } } break; } diff --git a/core/fpdfdoc/doc_formfield.cpp b/core/fpdfdoc/doc_formfield.cpp index 84d9a52dac..9849fa1e35 100644 --- a/core/fpdfdoc/doc_formfield.cpp +++ b/core/fpdfdoc/doc_formfield.cpp @@ -893,56 +893,37 @@ FX_BOOL CPDF_FormField::SetCheckValue(const CFX_WideString& value, int CPDF_FormField::GetTopVisibleIndex() { CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI"); - if (!pObj) { - return 0; - } - return pObj->GetInteger(); + return pObj ? pObj->GetInteger() : 0; } int CPDF_FormField::CountSelectedOptions() { - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I"); - if (!pObj) { - return 0; - } - CPDF_Array* pArray = pObj->GetArray(); - if (!pArray) { - return 0; - } - return static_cast<int>(pArray->GetCount()); + CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); + return pArray ? pArray->GetCount() : 0; } int CPDF_FormField::GetSelectedOptionIndex(int index) { - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I"); - if (!pObj) { + CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); + if (!pArray) return -1; - } - CPDF_Array* pArray = pObj->GetArray(); - if (!pArray) { + + int iCount = pArray->GetCount(); + if (iCount < 0 || index >= iCount) return -1; - } - int iCount = static_cast<int>(pArray->GetCount()); - if (iCount > 0 && index < iCount) { - return pArray->GetIntegerAt(index); - } - return -1; + return pArray->GetIntegerAt(index); } + FX_BOOL CPDF_FormField::IsOptionSelected(int iOptIndex) { - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I"); - if (!pObj) { - return FALSE; - } - CPDF_Array* pArray = pObj->GetArray(); - if (!pArray) { + CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); + if (!pArray) return FALSE; - } - size_t iCount = pArray->GetCount(); - for (size_t i = 0; i < iCount; i++) { - if (pArray->GetIntegerAt(i) == iOptIndex) { + + for (CPDF_Object* pObj : *pArray) { + if (pObj->GetInteger() == iOptIndex) return TRUE; - } } return FALSE; } + FX_BOOL CPDF_FormField::SelectOption(int iOptIndex, FX_BOOL bSelected, FX_BOOL bNotify) { |