diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2018-04-12 13:13:43 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-04-12 13:13:43 +0000 |
commit | e1a41afbe146c9a976d96828a3a09a8a384741d9 (patch) | |
tree | 6d6aac6f513d02de07ab6465de5d05aca08a8218 /xfa/fxfa | |
parent | 87b67f842fe53c3d5db553b6c1965f4588fecbfc (diff) | |
download | pdfium-e1a41afbe146c9a976d96828a3a09a8a384741d9.tar.xz |
[xfa] Remove form checksum abilities
This CL removes the code for verifying and creating checksums associated
with form elements in XFA documents. This was the only code requiring
the SAXReader which has also been removed.
According to the XFA spec and application can decide which parts of the
signatures are supported. This feature is being removed until we
determine if/when it is needed.
Bug: pdfium:1063
Change-Id: Iec2261282340f8fc72a1225d2e0d3e6ddf05edcb
Reviewed-on: https://pdfium-review.googlesource.com/30150
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'xfa/fxfa')
-rw-r--r-- | xfa/fxfa/cxfa_ffdoc.cpp | 18 | ||||
-rw-r--r-- | xfa/fxfa/cxfa_ffdoc.h | 3 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_dataexporter.cpp | 25 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_dataexporter.h | 14 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_simple_parser.cpp | 23 | ||||
-rw-r--r-- | xfa/fxfa/parser/xfa_utils.cpp | 10 | ||||
-rw-r--r-- | xfa/fxfa/parser/xfa_utils.h | 1 |
7 files changed, 17 insertions, 77 deletions
diff --git a/xfa/fxfa/cxfa_ffdoc.cpp b/xfa/fxfa/cxfa_ffdoc.cpp index fd3a1234b0..655e58ff7f 100644 --- a/xfa/fxfa/cxfa_ffdoc.cpp +++ b/xfa/fxfa/cxfa_ffdoc.cpp @@ -14,7 +14,6 @@ #include "core/fpdfapi/parser/cpdf_document.h" #include "core/fpdfapi/parser/fpdf_parser_decode.h" #include "core/fpdfdoc/cpdf_nametree.h" -#include "core/fxcrt/cfx_checksumcontext.h" #include "core/fxcrt/cfx_memorystream.h" #include "core/fxcrt/cfx_seekablemultistream.h" #include "core/fxcrt/fx_extension.h" @@ -390,18 +389,11 @@ RetainPtr<CFX_DIBitmap> CXFA_FFDoc::GetPDFNamedImage( } bool CXFA_FFDoc::SavePackage(CXFA_Node* pNode, - const RetainPtr<IFX_SeekableStream>& pFile, - CFX_ChecksumContext* pCSContext) { - auto pExport = pdfium::MakeUnique<CXFA_DataExporter>(GetXFADoc()); - if (!pNode) - return !!pExport->Export(pFile); - - ByteString bsChecksum; - if (pCSContext) - bsChecksum = pCSContext->GetChecksum(); - - return !!pExport->Export( - pFile, pNode, 0, bsChecksum.GetLength() ? bsChecksum.c_str() : nullptr); + const RetainPtr<IFX_SeekableStream>& pFile) { + ASSERT(pNode || GetXFADoc()->GetRoot()); + + CXFA_DataExporter exporter; + return exporter.Export(pFile, pNode ? pNode : GetXFADoc()->GetRoot()); } bool CXFA_FFDoc::ImportData(const RetainPtr<IFX_SeekableStream>& pStream, diff --git a/xfa/fxfa/cxfa_ffdoc.h b/xfa/fxfa/cxfa_ffdoc.h index 14bae5973a..2d9127c056 100644 --- a/xfa/fxfa/cxfa_ffdoc.h +++ b/xfa/fxfa/cxfa_ffdoc.h @@ -76,8 +76,7 @@ class CXFA_FFDoc { CFGAS_PDFFontMgr* GetPDFFontMgr() const { return m_pPDFFontMgr.get(); } bool SavePackage(CXFA_Node* pNode, - const RetainPtr<IFX_SeekableStream>& pFile, - CFX_ChecksumContext* pCSContext); + const RetainPtr<IFX_SeekableStream>& pFile); bool ImportData(const RetainPtr<IFX_SeekableStream>& pStream, bool bXDP = true); diff --git a/xfa/fxfa/parser/cxfa_dataexporter.cpp b/xfa/fxfa/parser/cxfa_dataexporter.cpp index 4f10d0ddfe..7773aeb190 100644 --- a/xfa/fxfa/parser/cxfa_dataexporter.cpp +++ b/xfa/fxfa/parser/cxfa_dataexporter.cpp @@ -15,35 +15,24 @@ #include "xfa/fxfa/parser/cxfa_node.h" #include "xfa/fxfa/parser/xfa_utils.h" -CXFA_DataExporter::CXFA_DataExporter(CXFA_Document* pDocument) - : m_pDocument(pDocument) { - ASSERT(m_pDocument); -} - -CXFA_DataExporter::~CXFA_DataExporter() {} +CXFA_DataExporter::CXFA_DataExporter() = default; -bool CXFA_DataExporter::Export(const RetainPtr<IFX_SeekableStream>& pWrite) { - return Export(pWrite, m_pDocument->GetRoot(), 0, nullptr); -} +CXFA_DataExporter::~CXFA_DataExporter() = default; bool CXFA_DataExporter::Export(const RetainPtr<IFX_SeekableStream>& pWrite, - CXFA_Node* pNode, - uint32_t dwFlag, - const char* pChecksum) { + CXFA_Node* pNode) { ASSERT(pWrite); if (!pWrite) return false; auto pStream = pdfium::MakeRetain<CFX_SeekableStreamProxy>(pWrite, true); pStream->SetCodePage(FX_CODEPAGE_UTF8); - return Export(pStream, pNode, dwFlag, pChecksum); + return Export(pStream, pNode); } bool CXFA_DataExporter::Export( const RetainPtr<CFX_SeekableStreamProxy>& pStream, - CXFA_Node* pNode, - uint32_t dwFlag, - const char* pChecksum) { + CXFA_Node* pNode) { if (pNode->IsModelNode()) { switch (pNode->GetPacketType()) { case XFA_PacketType::Xdp: { @@ -51,7 +40,7 @@ bool CXFA_DataExporter::Export( L"<xdp:xdp xmlns:xdp=\"http://ns.adobe.com/xdp/\">"); for (CXFA_Node* pChild = pNode->GetFirstChild(); pChild; pChild = pChild->GetNextSibling()) { - Export(pStream, pChild, dwFlag, pChecksum); + Export(pStream, pChild); } pStream->WriteString(L"</xdp:xdp\n>"); break; @@ -69,7 +58,7 @@ bool CXFA_DataExporter::Export( break; } case XFA_PacketType::Form: { - XFA_DataExporter_RegenerateFormFile(pNode, pStream, pChecksum, false); + XFA_DataExporter_RegenerateFormFile(pNode, pStream, false); break; } case XFA_PacketType::Template: diff --git a/xfa/fxfa/parser/cxfa_dataexporter.h b/xfa/fxfa/parser/cxfa_dataexporter.h index a2a55b3c13..5e3b58fefb 100644 --- a/xfa/fxfa/parser/cxfa_dataexporter.h +++ b/xfa/fxfa/parser/cxfa_dataexporter.h @@ -17,22 +17,14 @@ class CFX_SeekableStreamProxy; class CXFA_DataExporter { public: - explicit CXFA_DataExporter(CXFA_Document* pDocument); + CXFA_DataExporter(); ~CXFA_DataExporter(); - bool Export(const RetainPtr<IFX_SeekableStream>& pWrite); - bool Export(const RetainPtr<IFX_SeekableStream>& pWrite, - CXFA_Node* pNode, - uint32_t dwFlag, - const char* pChecksum); + bool Export(const RetainPtr<IFX_SeekableStream>& pWrite, CXFA_Node* pNode); private: bool Export(const RetainPtr<CFX_SeekableStreamProxy>& pStream, - CXFA_Node* pNode, - uint32_t dwFlag, - const char* pChecksum); - - UnownedPtr<CXFA_Document> const m_pDocument; + CXFA_Node* pNode); }; #endif // XFA_FXFA_PARSER_CXFA_DATAEXPORTER_H_ diff --git a/xfa/fxfa/parser/cxfa_simple_parser.cpp b/xfa/fxfa/parser/cxfa_simple_parser.cpp index 7021285dff..b916b4dfc4 100644 --- a/xfa/fxfa/parser/cxfa_simple_parser.cpp +++ b/xfa/fxfa/parser/cxfa_simple_parser.cpp @@ -9,7 +9,6 @@ #include <utility> #include <vector> -#include "core/fxcrt/cfx_checksumcontext.h" #include "core/fxcrt/cfx_seekablestreamproxy.h" #include "core/fxcrt/cfx_widetextbuf.h" #include "core/fxcrt/fx_codepage.h" @@ -376,7 +375,6 @@ CFX_XMLNode* CXFA_SimpleParser::ParseXMLData(const ByteString& wsXML) { auto pStream = pdfium::MakeRetain<CFX_SeekableStreamProxy>( const_cast<uint8_t*>(wsXML.raw_str()), wsXML.GetLength()); m_pXMLDoc = pdfium::MakeUnique<CFX_XMLDoc>(pStream); - m_pXMLDoc->GetParser()->m_dwCheckStatus = 0x03; int32_t iRet = m_pXMLDoc->DoLoad(); if (iRet < 0 || iRet >= 100) @@ -642,33 +640,12 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Form( return nullptr; } - CFX_XMLElement* pXMLDocumentElement = - static_cast<CFX_XMLElement*>(pXMLDocumentNode); - WideString wsChecksum = pXMLDocumentElement->GetString(L"checksum"); - if (wsChecksum.GetLength() != 28 || - m_pXMLDoc->GetParser()->m_dwCheckStatus != 0x03) { - return nullptr; - } - - auto pChecksum = pdfium::MakeUnique<CFX_ChecksumContext>(); - pChecksum->StartChecksum(); - pChecksum->UpdateChecksum(m_pFileRead, m_pXMLDoc->GetParser()->m_nStart[0], - m_pXMLDoc->GetParser()->m_nSize[0]); - pChecksum->UpdateChecksum(m_pFileRead, m_pXMLDoc->GetParser()->m_nStart[1], - m_pXMLDoc->GetParser()->m_nSize[1]); - pChecksum->FinishChecksum(); - ByteString bsCheck = pChecksum->GetChecksum(); - if (bsCheck != wsChecksum.UTF8Encode()) - return nullptr; - CXFA_Node* pNode = m_pFactory->CreateNode(XFA_PacketType::Form, XFA_Element::Form); if (!pNode) return nullptr; pNode->JSObject()->SetCData(XFA_Attribute::Name, packet->name, false, false); - pNode->JSObject()->SetAttribute(XFA_Attribute::Checksum, - wsChecksum.AsStringView(), false); CXFA_Template* pTemplateRoot = m_pRootNode->GetFirstChildByClass<CXFA_Template>(XFA_Element::Template); CXFA_Subform* pTemplateChosen = diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp index 65be9625ba..7b4e4b1989 100644 --- a/xfa/fxfa/parser/xfa_utils.cpp +++ b/xfa/fxfa/parser/xfa_utils.cpp @@ -520,17 +520,9 @@ void XFA_DataExporter_DealWithDataGroupNode(CXFA_Node* pDataNode) { void XFA_DataExporter_RegenerateFormFile( CXFA_Node* pNode, const RetainPtr<CFX_SeekableStreamProxy>& pStream, - const char* pChecksum, bool bSaveXML) { if (pNode->IsModelNode()) { - pStream->WriteString(L"<form"); - if (pChecksum) { - WideString wsChecksum = WideString::FromUTF8(pChecksum); - pStream->WriteString(L" checksum=\""); - pStream->WriteString(wsChecksum.AsStringView()); - pStream->WriteString(L"\""); - } - pStream->WriteString(L" xmlns=\""); + pStream->WriteString(L"<form xmlns=\""); pStream->WriteString(WideStringView(kFormNS)); WideString wsVersionNumber = RecognizeXFAVersionNumber( diff --git a/xfa/fxfa/parser/xfa_utils.h b/xfa/fxfa/parser/xfa_utils.h index 3b59ac8b3a..d78b9ca57c 100644 --- a/xfa/fxfa/parser/xfa_utils.h +++ b/xfa/fxfa/parser/xfa_utils.h @@ -32,7 +32,6 @@ void XFA_DataExporter_DealWithDataGroupNode(CXFA_Node* pDataNode); void XFA_DataExporter_RegenerateFormFile( CXFA_Node* pNode, const RetainPtr<CFX_SeekableStreamProxy>& pStream, - const char* pChecksum, bool bSaveXML); const XFA_SCRIPTATTRIBUTEINFO* XFA_GetScriptAttributeByName( |