summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordan sinclair <dsinclair@chromium.org>2018-04-17 18:45:50 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-04-17 18:45:50 +0000
commit8e753ca397ea332b29d65736b0e0bf9ad466df56 (patch)
treed8a53c3c3852ec6c4dd66dc69ce2b04f69d61742
parent5925398cc46eccdec720166c1b6bbb87cfb19564 (diff)
downloadpdfium-8e753ca397ea332b29d65736b0e0bf9ad466df56.tar.xz
Convert CFX_XMLParser to take a IFX_SeekableStream
This CL changes the CFX_XMLParser to accept an IFX_SeekableStream intead of a CFX_SeekableStreamProxy. Change-Id: I3534288a8a00095acd78a60bf6b925c6a0357892 Reviewed-on: https://pdfium-review.googlesource.com/30856 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: dsinclair <dsinclair@chromium.org>
-rw-r--r--core/fpdfdoc/cpdf_metadata.cpp9
-rw-r--r--core/fxcrt/xml/cfx_xmlparser.cpp11
-rw-r--r--core/fxcrt/xml/cfx_xmlparser.h4
-rw-r--r--core/fxcrt/xml/cfx_xmlparser_unittest.cpp12
-rw-r--r--testing/libfuzzer/pdf_xml_fuzzer.cc8
-rw-r--r--xfa/fxfa/parser/cxfa_document_parser.cpp17
-rw-r--r--xfa/fxfa/parser/cxfa_document_parser.h3
-rw-r--r--xfa/fxfa/parser/cxfa_xmllocale.cpp9
8 files changed, 34 insertions, 39 deletions
diff --git a/core/fpdfdoc/cpdf_metadata.cpp b/core/fpdfdoc/cpdf_metadata.cpp
index 56f8c64c0e..161fc93edd 100644
--- a/core/fpdfdoc/cpdf_metadata.cpp
+++ b/core/fpdfdoc/cpdf_metadata.cpp
@@ -8,6 +8,7 @@
#include "core/fpdfapi/parser/cpdf_stream.h"
#include "core/fpdfapi/parser/cpdf_stream_acc.h"
+#include "core/fxcrt/cfx_memorystream.h"
#include "core/fxcrt/fx_codepage.h"
#include "core/fxcrt/xml/cfx_xmlelement.h"
#include "core/fxcrt/xml/cfx_xmlparser.h"
@@ -68,11 +69,9 @@ std::vector<UnsupportedFeature> CPDF_Metadata::CheckForSharedForm() const {
pAcc->LoadAllDataFiltered();
auto root = pdfium::MakeUnique<CFX_XMLElement>(L"root");
- auto proxy = pdfium::MakeRetain<CFX_SeekableStreamProxy>(pAcc->GetData(),
- pAcc->GetSize());
- proxy->SetCodePage(FX_CODEPAGE_UTF8);
-
- CFX_XMLParser parser(root.get(), proxy);
+ auto stream = pdfium::MakeRetain<CFX_MemoryStream>(pAcc->GetData(),
+ pAcc->GetSize(), false);
+ CFX_XMLParser parser(root.get(), stream);
if (!parser.Parse())
return {};
diff --git a/core/fxcrt/xml/cfx_xmlparser.cpp b/core/fxcrt/xml/cfx_xmlparser.cpp
index 8292b33206..9336c11f87 100644
--- a/core/fxcrt/xml/cfx_xmlparser.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser.cpp
@@ -10,6 +10,7 @@
#include <cwctype>
#include <iterator>
+#include "core/fxcrt/fx_codepage.h"
#include "core/fxcrt/fx_extension.h"
#include "core/fxcrt/fx_safe_types.h"
#include "core/fxcrt/xml/cfx_xmlchardata.h"
@@ -81,10 +82,10 @@ bool CFX_XMLParser::IsXMLNameChar(wchar_t ch, bool bFirstChar) {
}
CFX_XMLParser::CFX_XMLParser(CFX_XMLNode* pParent,
- const RetainPtr<CFX_SeekableStreamProxy>& pStream)
+ const RetainPtr<IFX_SeekableStream>& pStream)
: m_pParent(pParent),
m_pChild(nullptr),
- m_pStream(pStream),
+ m_pStream(pdfium::MakeRetain<CFX_SeekableStreamProxy>(pStream)),
m_iXMLPlaneSize(1024),
m_iCurrentPos(0),
m_iCurrentNodeNum(-1),
@@ -106,6 +107,12 @@ CFX_XMLParser::CFX_XMLParser(CFX_XMLNode* pParent,
ASSERT(m_pParent);
ASSERT(pStream);
+ uint16_t wCodePage = m_pStream->GetCodePage();
+ if (wCodePage != FX_CODEPAGE_UTF16LE && wCodePage != FX_CODEPAGE_UTF16BE &&
+ wCodePage != FX_CODEPAGE_UTF8) {
+ m_pStream->SetCodePage(FX_CODEPAGE_UTF8);
+ }
+
m_NodeStack.push(m_pParent);
m_CurNode.iNodeNum = -1;
diff --git a/core/fxcrt/xml/cfx_xmlparser.h b/core/fxcrt/xml/cfx_xmlparser.h
index 02a6ac441f..52d86fb82d 100644
--- a/core/fxcrt/xml/cfx_xmlparser.h
+++ b/core/fxcrt/xml/cfx_xmlparser.h
@@ -19,7 +19,7 @@
class CFX_XMLElement;
class CFX_XMLNode;
-class CFX_SeekableStreamProxy;
+class IFX_SeekableStream;
enum class FX_XmlSyntaxResult {
None,
@@ -44,7 +44,7 @@ class CFX_XMLParser {
static bool IsXMLNameChar(wchar_t ch, bool bFirstChar);
CFX_XMLParser(CFX_XMLNode* pParent,
- const RetainPtr<CFX_SeekableStreamProxy>& pStream);
+ const RetainPtr<IFX_SeekableStream>& pStream);
virtual ~CFX_XMLParser();
bool Parse();
diff --git a/core/fxcrt/xml/cfx_xmlparser_unittest.cpp b/core/fxcrt/xml/cfx_xmlparser_unittest.cpp
index 97a81f7640..4bd953df25 100644
--- a/core/fxcrt/xml/cfx_xmlparser_unittest.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser_unittest.cpp
@@ -6,7 +6,7 @@
#include <memory>
-#include "core/fxcrt/cfx_seekablestreamproxy.h"
+#include "core/fxcrt/cfx_memorystream.h"
#include "core/fxcrt/fx_codepage.h"
#include "core/fxcrt/xml/cfx_xmlnode.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -18,7 +18,7 @@ namespace {
class CFX_XMLTestParser : public CFX_XMLParser {
public:
CFX_XMLTestParser(CFX_XMLNode* pParent,
- const RetainPtr<CFX_SeekableStreamProxy>& pStream)
+ const RetainPtr<IFX_SeekableStream>& pStream)
: CFX_XMLParser(pParent, pStream) {}
~CFX_XMLTestParser() override = default;
@@ -38,10 +38,10 @@ class CFX_XMLTestParser : public CFX_XMLParser {
WideString GetTextData() const { return CFX_XMLParser::GetTextData(); }
};
-RetainPtr<CFX_SeekableStreamProxy> MakeProxy(const char* input) {
- auto stream = pdfium::MakeRetain<CFX_SeekableStreamProxy>(
- reinterpret_cast<uint8_t*>(const_cast<char*>(input)), strlen(input));
- stream->SetCodePage(FX_CODEPAGE_UTF8);
+RetainPtr<CFX_MemoryStream> MakeProxy(const char* input) {
+ auto stream = pdfium::MakeRetain<CFX_MemoryStream>(
+ reinterpret_cast<uint8_t*>(const_cast<char*>(input)), strlen(input),
+ false);
return stream;
}
diff --git a/testing/libfuzzer/pdf_xml_fuzzer.cc b/testing/libfuzzer/pdf_xml_fuzzer.cc
index a8af779259..b9cb01580c 100644
--- a/testing/libfuzzer/pdf_xml_fuzzer.cc
+++ b/testing/libfuzzer/pdf_xml_fuzzer.cc
@@ -6,7 +6,7 @@
#include <cstdint>
#include <memory>
-#include "core/fxcrt/cfx_seekablestreamproxy.h"
+#include "core/fxcrt/cfx_memorystream.h"
#include "core/fxcrt/fx_safe_types.h"
#include "core/fxcrt/fx_system.h"
#include "core/fxcrt/xml/cfx_xmlnode.h"
@@ -18,10 +18,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
if (!safe_size.IsValid())
return 0;
- RetainPtr<CFX_SeekableStreamProxy> stream =
- pdfium::MakeRetain<CFX_SeekableStreamProxy>(const_cast<uint8_t*>(data),
- size);
-
+ auto stream = pdfium::MakeRetain<CFX_MemoryStream>(const_cast<uint8_t*>(data),
+ size, false);
auto root = pdfium::MakeUnique<CFX_XMLNode>();
CFX_XMLParser parser(root.get(), stream);
if (!parser.Parse())
diff --git a/xfa/fxfa/parser/cxfa_document_parser.cpp b/xfa/fxfa/parser/cxfa_document_parser.cpp
index f52d52ff3c..62828d71a7 100644
--- a/xfa/fxfa/parser/cxfa_document_parser.cpp
+++ b/xfa/fxfa/parser/cxfa_document_parser.cpp
@@ -9,7 +9,7 @@
#include <utility>
#include <vector>
-#include "core/fxcrt/cfx_seekablestreamproxy.h"
+#include "core/fxcrt/cfx_memorystream.h"
#include "core/fxcrt/cfx_widetextbuf.h"
#include "core/fxcrt/fx_codepage.h"
#include "core/fxcrt/fx_extension.h"
@@ -329,14 +329,7 @@ CXFA_DocumentParser::~CXFA_DocumentParser() {}
bool CXFA_DocumentParser::Parse(const RetainPtr<IFX_SeekableStream>& pStream,
XFA_PacketType ePacketID) {
- auto pStreamProxy = pdfium::MakeRetain<CFX_SeekableStreamProxy>(pStream);
- uint16_t wCodePage = pStreamProxy->GetCodePage();
- if (wCodePage != FX_CODEPAGE_UTF16LE && wCodePage != FX_CODEPAGE_UTF16BE &&
- wCodePage != FX_CODEPAGE_UTF8) {
- pStreamProxy->SetCodePage(FX_CODEPAGE_UTF8);
- }
-
- m_pNodeTree = LoadXML(pStreamProxy);
+ m_pNodeTree = LoadXML(pStream);
if (!m_pNodeTree)
return false;
@@ -345,14 +338,14 @@ bool CXFA_DocumentParser::Parse(const RetainPtr<IFX_SeekableStream>& pStream,
}
CFX_XMLNode* CXFA_DocumentParser::ParseXMLData(const ByteString& wsXML) {
- auto pStream = pdfium::MakeRetain<CFX_SeekableStreamProxy>(
- const_cast<uint8_t*>(wsXML.raw_str()), wsXML.GetLength());
+ auto pStream = pdfium::MakeRetain<CFX_MemoryStream>(
+ const_cast<uint8_t*>(wsXML.raw_str()), wsXML.GetLength(), false);
m_pNodeTree = LoadXML(pStream);
return m_pNodeTree ? GetDocumentNode(m_pNodeTree.get()) : nullptr;
}
std::unique_ptr<CFX_XMLNode> CXFA_DocumentParser::LoadXML(
- const RetainPtr<CFX_SeekableStreamProxy>& pStream) {
+ const RetainPtr<IFX_SeekableStream>& pStream) {
ASSERT(pStream);
auto root = pdfium::MakeUnique<CFX_XMLNode>();
diff --git a/xfa/fxfa/parser/cxfa_document_parser.h b/xfa/fxfa/parser/cxfa_document_parser.h
index acd27e6238..d76d5953ac 100644
--- a/xfa/fxfa/parser/cxfa_document_parser.h
+++ b/xfa/fxfa/parser/cxfa_document_parser.h
@@ -18,7 +18,6 @@ class CXFA_Node;
class CFX_XMLDoc;
class CFX_XMLInstruction;
class IFX_SeekableStream;
-class CFX_SeekableStreamProxy;
class CXFA_DocumentParser {
public:
@@ -36,7 +35,7 @@ class CXFA_DocumentParser {
private:
std::unique_ptr<CFX_XMLNode> LoadXML(
- const RetainPtr<CFX_SeekableStreamProxy>& pStream);
+ const RetainPtr<IFX_SeekableStream>& pStream);
CXFA_Node* ParseAsXDPPacket(CFX_XMLNode* pXMLDocumentNode,
XFA_PacketType ePacketID);
diff --git a/xfa/fxfa/parser/cxfa_xmllocale.cpp b/xfa/fxfa/parser/cxfa_xmllocale.cpp
index 4354ed98de..ffb4cd9dde 100644
--- a/xfa/fxfa/parser/cxfa_xmllocale.cpp
+++ b/xfa/fxfa/parser/cxfa_xmllocale.cpp
@@ -8,6 +8,7 @@
#include <utility>
+#include "core/fxcrt/cfx_memorystream.h"
#include "core/fxcrt/fx_codepage.h"
#include "core/fxcrt/xml/cfx_xmlelement.h"
#include "core/fxcrt/xml/cfx_xmlparser.h"
@@ -30,11 +31,9 @@ constexpr wchar_t kCurrencySymbol[] = L"currencySymbol";
std::unique_ptr<CXFA_XMLLocale> CXFA_XMLLocale::Create(
pdfium::span<uint8_t> data) {
auto root = pdfium::MakeUnique<CFX_XMLElement>(L"root");
- auto proxy =
- pdfium::MakeRetain<CFX_SeekableStreamProxy>(data.data(), data.size());
- proxy->SetCodePage(FX_CODEPAGE_UTF8);
-
- CFX_XMLParser parser(root.get(), proxy);
+ auto stream =
+ pdfium::MakeRetain<CFX_MemoryStream>(data.data(), data.size(), false);
+ CFX_XMLParser parser(root.get(), stream);
if (!parser.Parse())
return nullptr;