| Index: core/src/fpdfdoc/doc_formfield.cpp
|
| diff --git a/core/src/fpdfdoc/doc_formfield.cpp b/core/src/fpdfdoc/doc_formfield.cpp
|
| index f9b8438a0ecca3e8ae08a30d8bec3696de08f021..51465727eeb2b6034eee006f743c04fd11e9f0cc 100644
|
| --- a/core/src/fpdfdoc/doc_formfield.cpp
|
| +++ b/core/src/fpdfdoc/doc_formfield.cpp
|
| @@ -307,10 +307,9 @@ CFX_WideString CPDF_FormField::GetValue(FX_BOOL bDefault) {
|
| case PDFOBJ_STREAM:
|
| return pValue->GetUnicodeText();
|
| case PDFOBJ_ARRAY:
|
| - pValue = ((CPDF_Array*)pValue)->GetElementValue(0);
|
| - if (pValue) {
|
| + pValue = pValue->AsArray()->GetElementValue(0);
|
| + if (pValue)
|
| return pValue->GetUnicodeText();
|
| - }
|
| break;
|
| }
|
| return CFX_WideString();
|
| @@ -419,28 +418,24 @@ int CPDF_FormField::GetMaxLen() {
|
| }
|
| int CPDF_FormField::CountSelectedItems() {
|
| CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
|
| - if (pValue == NULL) {
|
| + if (!pValue) {
|
| pValue = FPDF_GetFieldAttr(m_pDict, "I");
|
| - if (pValue == NULL) {
|
| + if (!pValue)
|
| return 0;
|
| - }
|
| }
|
|
|
| if (pValue->IsString() || pValue->IsNumber())
|
| return pValue->GetString().IsEmpty() ? 0 : 1;
|
| -
|
| - if (pValue->GetType() != PDFOBJ_ARRAY) {
|
| - return 0;
|
| - }
|
| - return ((CPDF_Array*)pValue)->GetCount();
|
| + if (CPDF_Array* pArray = pValue->AsArray())
|
| + return pArray->GetCount();
|
| + return 0;
|
| }
|
| int CPDF_FormField::GetSelectedIndex(int index) {
|
| CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
|
| - if (pValue == NULL) {
|
| + if (!pValue) {
|
| pValue = FPDF_GetFieldAttr(m_pDict, "I");
|
| - if (pValue == NULL) {
|
| + if (!pValue)
|
| return -1;
|
| - }
|
| }
|
| if (pValue->IsNumber())
|
| return pValue->GetInteger();
|
| @@ -449,16 +444,13 @@ int CPDF_FormField::GetSelectedIndex(int index) {
|
| if (pValue->IsString()) {
|
| if (index != 0)
|
| return -1;
|
| -
|
| sel_value = pValue->GetUnicodeText();
|
| } else {
|
| - if (pValue->GetType() != PDFOBJ_ARRAY) {
|
| - return -1;
|
| - }
|
| - if (index < 0) {
|
| + CPDF_Array* pArray = pValue->AsArray();
|
| + if (!pArray || index < 0)
|
| return -1;
|
| - }
|
| - CPDF_Object* elementValue = ((CPDF_Array*)pValue)->GetElementValue(index);
|
| +
|
| + CPDF_Object* elementValue = pArray->GetElementValue(index);
|
| sel_value =
|
| elementValue ? elementValue->GetUnicodeText() : CFX_WideString();
|
| }
|
| @@ -537,10 +529,10 @@ FX_BOOL CPDF_FormField::IsItemSelected(int index) {
|
| return (pValue->GetInteger() == index);
|
| }
|
|
|
| - if (pValue->GetType() != PDFOBJ_ARRAY) {
|
| + CPDF_Array* pArray = pValue->AsArray();
|
| + if (!pArray)
|
| return FALSE;
|
| - }
|
| - CPDF_Array* pArray = (CPDF_Array*)pValue;
|
| +
|
| int iPos = -1;
|
| for (int j = 0; j < CountSelectedOptions(); j++) {
|
| if (GetSelectedOptionIndex(j) == index) {
|
| @@ -584,11 +576,8 @@ FX_BOOL CPDF_FormField::SetItemSelection(int index,
|
| if (pValue->GetUnicodeText() == opt_value) {
|
| m_pDict->RemoveAt("V");
|
| }
|
| - } else if (pValue->GetType() == PDFOBJ_ARRAY) {
|
| + } else if (pValue->IsArray()) {
|
| CPDF_Array* pArray = CPDF_Array::Create();
|
| - if (pArray == NULL) {
|
| - return FALSE;
|
| - }
|
| int iCount = CountOptions();
|
| for (int i = 0; i < iCount; i++) {
|
| if (i != index) {
|
| @@ -703,24 +692,19 @@ void CPDF_FormField::UpdateAP(CPDF_FormControl* pControl) {
|
| }
|
| }
|
| int CPDF_FormField::CountOptions() {
|
| - CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt");
|
| - if (pValue == NULL || pValue->GetType() != PDFOBJ_ARRAY) {
|
| - return 0;
|
| - }
|
| - return ((CPDF_Array*)pValue)->GetCount();
|
| + CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "Opt"));
|
| + return pArray ? pArray->GetCount() : 0;
|
| }
|
| CFX_WideString CPDF_FormField::GetOptionText(int index, int sub_index) {
|
| - CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt");
|
| - if (pValue == NULL || pValue->GetType() != PDFOBJ_ARRAY) {
|
| + CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "Opt"));
|
| + if (!pArray)
|
| return CFX_WideString();
|
| - }
|
| - CPDF_Object* pOption = ((CPDF_Array*)pValue)->GetElementValue(index);
|
| - if (pOption == NULL) {
|
| +
|
| + CPDF_Object* pOption = pArray->GetElementValue(index);
|
| + if (!pOption)
|
| return CFX_WideString();
|
| - }
|
| - if (pOption->GetType() == PDFOBJ_ARRAY) {
|
| - pOption = ((CPDF_Array*)pOption)->GetElementValue(sub_index);
|
| - }
|
| + if (CPDF_Array* pOptionArray = pOption->AsArray())
|
| + pOption = pOptionArray->GetElementValue(sub_index);
|
|
|
| CPDF_String* pString = ToString(pOption);
|
| return pString ? pString->GetUnicodeText() : CFX_WideString();
|
| @@ -796,7 +780,7 @@ FX_BOOL CPDF_FormField::CheckControl(int iControlIndex,
|
| }
|
| }
|
| CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt");
|
| - if (pOpt == NULL || pOpt->GetType() != PDFOBJ_ARRAY) {
|
| + if (!ToArray(pOpt)) {
|
| if (bChecked) {
|
| m_pDict->SetAtName("V", csBExport);
|
| } else {
|
|
|