| Index: core/fpdfdoc/cpvt_generateap.cpp
|
| diff --git a/core/fpdfdoc/cpvt_generateap.cpp b/core/fpdfdoc/cpvt_generateap.cpp
|
| index 1e531799e86d6174cc2758667d917adfa6e06771..d7c8bec3a14d663510a97cf4c12fa5ce7aeffaa7 100644
|
| --- a/core/fpdfdoc/cpvt_generateap.cpp
|
| +++ b/core/fpdfdoc/cpvt_generateap.cpp
|
| @@ -6,6 +6,8 @@
|
|
|
| #include "core/fpdfdoc/cpvt_generateap.h"
|
|
|
| +#include <algorithm>
|
| +
|
| #include "core/fpdfapi/fpdf_font/include/cpdf_font.h"
|
| #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h"
|
| #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h"
|
| @@ -669,18 +671,23 @@ bool FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict) {
|
| if (!pAnnotDict || pAnnotDict->GetStringFor("Subtype") != "Widget")
|
| return false;
|
|
|
| - CFX_ByteString field_type = FPDF_GetFieldAttr(pAnnotDict, "FT")->GetString();
|
| - uint32_t flags = FPDF_GetFieldAttr(pAnnotDict, "Ff")
|
| - ? FPDF_GetFieldAttr(pAnnotDict, "Ff")->GetInteger()
|
| - : 0;
|
| - if (field_type == "Tx") {
|
| + CPDF_Object* pFieldTypeObj = FPDF_GetFieldAttr(pAnnotDict, "FT");
|
| + if (!pFieldTypeObj)
|
| + return false;
|
| +
|
| + CFX_ByteString field_type = pFieldTypeObj->GetString();
|
| + if (field_type == "Tx")
|
| return CPVT_GenerateAP::GenerateTextFieldAP(pDoc, pAnnotDict);
|
| - }
|
| +
|
| + CPDF_Object* pFieldFlagsObj = FPDF_GetFieldAttr(pAnnotDict, "Ff");
|
| + uint32_t flags = pFieldFlagsObj ? pFieldFlagsObj->GetInteger() : 0;
|
| +
|
| if (field_type == "Ch") {
|
| return (flags & (1 << 17))
|
| ? CPVT_GenerateAP::GenerateComboBoxAP(pDoc, pAnnotDict)
|
| : CPVT_GenerateAP::GenerateListBoxAP(pDoc, pAnnotDict);
|
| }
|
| +
|
| if (field_type == "Btn") {
|
| if (!(flags & (1 << 16))) {
|
| if (!pAnnotDict->KeyExist("AS")) {
|
| @@ -692,6 +699,7 @@ bool FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict) {
|
| }
|
| }
|
| }
|
| +
|
| return false;
|
| }
|
|
|
|
|