| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/fxcrt/xml_int.h" | 7 #include "core/fxcrt/xml_int.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 bool g_FXCRT_XML_IsNameChar(uint8_t ch) { | 67 bool g_FXCRT_XML_IsNameChar(uint8_t ch) { |
| 68 return !!(g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameChar); | 68 return !!(g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameChar); |
| 69 } | 69 } |
| 70 | 70 |
| 71 class CXML_DataBufAcc : public IFX_BufferedReadStream { | 71 class CXML_DataBufAcc : public IFX_BufferedReadStream { |
| 72 public: | 72 public: |
| 73 CXML_DataBufAcc(const uint8_t* pBuffer, size_t size); | 73 CXML_DataBufAcc(const uint8_t* pBuffer, size_t size); |
| 74 ~CXML_DataBufAcc() override; | 74 ~CXML_DataBufAcc() override; |
| 75 | 75 |
| 76 // IFX_BufferedReadStream | 76 // IFX_BufferedReadStream |
| 77 void Release() override; | |
| 78 bool IsEOF() override; | 77 bool IsEOF() override; |
| 79 FX_FILESIZE GetPosition() override; | 78 FX_FILESIZE GetPosition() override; |
| 80 size_t ReadBlock(void* buffer, size_t size) override; | 79 size_t ReadBlock(void* buffer, size_t size) override; |
| 81 bool ReadNextBlock(bool bRestart) override; | 80 bool ReadNextBlock(bool bRestart) override; |
| 82 const uint8_t* GetBlockBuffer() override; | 81 const uint8_t* GetBlockBuffer() override; |
| 83 size_t GetBlockSize() override; | 82 size_t GetBlockSize() override; |
| 84 FX_FILESIZE GetBlockOffset() override; | 83 FX_FILESIZE GetBlockOffset() override; |
| 85 | 84 |
| 86 private: | 85 private: |
| 87 const uint8_t* m_pBuffer; | 86 const uint8_t* m_pBuffer; |
| 88 size_t m_dwSize; | 87 size_t m_dwSize; |
| 89 size_t m_dwCurPos; | 88 size_t m_dwCurPos; |
| 90 }; | 89 }; |
| 91 | 90 |
| 92 CXML_DataBufAcc::CXML_DataBufAcc(const uint8_t* pBuffer, size_t size) | 91 CXML_DataBufAcc::CXML_DataBufAcc(const uint8_t* pBuffer, size_t size) |
| 93 : m_pBuffer(pBuffer), m_dwSize(size), m_dwCurPos(0) {} | 92 : m_pBuffer(pBuffer), m_dwSize(size), m_dwCurPos(0) {} |
| 94 | 93 |
| 95 CXML_DataBufAcc::~CXML_DataBufAcc() {} | 94 CXML_DataBufAcc::~CXML_DataBufAcc() {} |
| 96 | 95 |
| 97 void CXML_DataBufAcc::Release() { | |
| 98 delete this; | |
| 99 } | |
| 100 | |
| 101 bool CXML_DataBufAcc::IsEOF() { | 96 bool CXML_DataBufAcc::IsEOF() { |
| 102 return m_dwCurPos >= m_dwSize; | 97 return m_dwCurPos >= m_dwSize; |
| 103 } | 98 } |
| 104 | 99 |
| 105 FX_FILESIZE CXML_DataBufAcc::GetPosition() { | 100 FX_FILESIZE CXML_DataBufAcc::GetPosition() { |
| 106 return (FX_FILESIZE)m_dwCurPos; | 101 return (FX_FILESIZE)m_dwCurPos; |
| 107 } | 102 } |
| 108 | 103 |
| 109 size_t CXML_DataBufAcc::ReadBlock(void* buffer, size_t size) { | 104 size_t CXML_DataBufAcc::ReadBlock(void* buffer, size_t size) { |
| 110 return 0; | 105 return 0; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 128 size_t CXML_DataBufAcc::GetBlockSize() { | 123 size_t CXML_DataBufAcc::GetBlockSize() { |
| 129 return m_dwSize; | 124 return m_dwSize; |
| 130 } | 125 } |
| 131 | 126 |
| 132 FX_FILESIZE CXML_DataBufAcc::GetBlockOffset() { | 127 FX_FILESIZE CXML_DataBufAcc::GetBlockOffset() { |
| 133 return 0; | 128 return 0; |
| 134 } | 129 } |
| 135 | 130 |
| 136 class CXML_DataStmAcc : public IFX_BufferedReadStream { | 131 class CXML_DataStmAcc : public IFX_BufferedReadStream { |
| 137 public: | 132 public: |
| 138 explicit CXML_DataStmAcc(IFX_SeekableReadStream* pFileRead); | 133 explicit CXML_DataStmAcc( |
| 134 const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead); |
| 139 ~CXML_DataStmAcc() override; | 135 ~CXML_DataStmAcc() override; |
| 140 | 136 |
| 141 // IFX_BufferedReadStream | 137 // IFX_BufferedReadStream |
| 142 void Release() override; | |
| 143 bool IsEOF() override; | 138 bool IsEOF() override; |
| 144 FX_FILESIZE GetPosition() override; | 139 FX_FILESIZE GetPosition() override; |
| 145 size_t ReadBlock(void* buffer, size_t size) override; | 140 size_t ReadBlock(void* buffer, size_t size) override; |
| 146 bool ReadNextBlock(bool bRestart) override; | 141 bool ReadNextBlock(bool bRestart) override; |
| 147 const uint8_t* GetBlockBuffer() override; | 142 const uint8_t* GetBlockBuffer() override; |
| 148 size_t GetBlockSize() override; | 143 size_t GetBlockSize() override; |
| 149 FX_FILESIZE GetBlockOffset() override; | 144 FX_FILESIZE GetBlockOffset() override; |
| 150 | 145 |
| 151 private: | 146 private: |
| 152 IFX_SeekableReadStream* m_pFileRead; | 147 CFX_RetainPtr<IFX_SeekableReadStream> m_pFileRead; |
| 153 uint8_t* m_pBuffer; | 148 uint8_t* m_pBuffer; |
| 154 FX_FILESIZE m_nStart; | 149 FX_FILESIZE m_nStart; |
| 155 size_t m_dwSize; | 150 size_t m_dwSize; |
| 156 }; | 151 }; |
| 157 | 152 |
| 158 CXML_DataStmAcc::CXML_DataStmAcc(IFX_SeekableReadStream* pFileRead) | 153 CXML_DataStmAcc::CXML_DataStmAcc( |
| 154 const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead) |
| 159 : m_pFileRead(pFileRead), m_pBuffer(nullptr), m_nStart(0), m_dwSize(0) { | 155 : m_pFileRead(pFileRead), m_pBuffer(nullptr), m_nStart(0), m_dwSize(0) { |
| 160 ASSERT(m_pFileRead); | 156 ASSERT(m_pFileRead); |
| 161 } | 157 } |
| 162 | 158 |
| 163 CXML_DataStmAcc::~CXML_DataStmAcc() { | 159 CXML_DataStmAcc::~CXML_DataStmAcc() { |
| 164 FX_Free(m_pBuffer); | 160 FX_Free(m_pBuffer); |
| 165 } | 161 } |
| 166 | 162 |
| 167 void CXML_DataStmAcc::Release() { | |
| 168 delete this; | |
| 169 } | |
| 170 | |
| 171 bool CXML_DataStmAcc::IsEOF() { | 163 bool CXML_DataStmAcc::IsEOF() { |
| 172 return m_nStart + (FX_FILESIZE)m_dwSize >= m_pFileRead->GetSize(); | 164 return m_nStart + (FX_FILESIZE)m_dwSize >= m_pFileRead->GetSize(); |
| 173 } | 165 } |
| 174 | 166 |
| 175 FX_FILESIZE CXML_DataStmAcc::GetPosition() { | 167 FX_FILESIZE CXML_DataStmAcc::GetPosition() { |
| 176 return m_nStart + (FX_FILESIZE)m_dwSize; | 168 return m_nStart + (FX_FILESIZE)m_dwSize; |
| 177 } | 169 } |
| 178 | 170 |
| 179 size_t CXML_DataStmAcc::ReadBlock(void* buffer, size_t size) { | 171 size_t CXML_DataStmAcc::ReadBlock(void* buffer, size_t size) { |
| 180 return 0; | 172 return 0; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 206 return m_dwSize; | 198 return m_dwSize; |
| 207 } | 199 } |
| 208 | 200 |
| 209 FX_FILESIZE CXML_DataStmAcc::GetBlockOffset() { | 201 FX_FILESIZE CXML_DataStmAcc::GetBlockOffset() { |
| 210 return m_nStart; | 202 return m_nStart; |
| 211 } | 203 } |
| 212 | 204 |
| 213 } // namespace | 205 } // namespace |
| 214 | 206 |
| 215 CXML_Parser::CXML_Parser() | 207 CXML_Parser::CXML_Parser() |
| 216 : m_pDataAcc(nullptr), | 208 : m_nOffset(0), |
| 217 m_bOwnedStream(false), | |
| 218 m_nOffset(0), | |
| 219 m_bSaveSpaceChars(false), | 209 m_bSaveSpaceChars(false), |
| 220 m_pBuffer(nullptr), | 210 m_pBuffer(nullptr), |
| 221 m_dwBufferSize(0), | 211 m_dwBufferSize(0), |
| 222 m_nBufferOffset(0), | 212 m_nBufferOffset(0), |
| 223 m_dwIndex(0) {} | 213 m_dwIndex(0) {} |
| 224 | 214 |
| 225 CXML_Parser::~CXML_Parser() { | 215 CXML_Parser::~CXML_Parser() {} |
| 226 if (m_bOwnedStream) { | 216 |
| 227 m_pDataAcc->Release(); | 217 bool CXML_Parser::Init(uint8_t* pBuffer, size_t size) { |
| 228 } | 218 m_pDataAcc.Reset(new CXML_DataBufAcc(pBuffer, size)); |
| 219 return Init(); |
| 229 } | 220 } |
| 230 | 221 |
| 231 bool CXML_Parser::Init(uint8_t* pBuffer, size_t size) { | 222 bool CXML_Parser::Init(const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead) { |
| 232 m_pDataAcc = new CXML_DataBufAcc(pBuffer, size); | 223 m_pDataAcc.Reset(new CXML_DataStmAcc(pFileRead)); |
| 233 return Init(true); | 224 return Init(); |
| 234 } | 225 } |
| 235 | 226 |
| 236 bool CXML_Parser::Init(IFX_SeekableReadStream* pFileRead) { | 227 bool CXML_Parser::Init(const CFX_RetainPtr<IFX_BufferedReadStream>& pBuffer) { |
| 237 m_pDataAcc = new CXML_DataStmAcc(pFileRead); | |
| 238 return Init(true); | |
| 239 } | |
| 240 | |
| 241 bool CXML_Parser::Init(IFX_BufferedReadStream* pBuffer) { | |
| 242 if (!pBuffer) | 228 if (!pBuffer) |
| 243 return false; | 229 return false; |
| 244 | 230 |
| 245 m_pDataAcc = pBuffer; | 231 m_pDataAcc = pBuffer; |
| 246 return Init(false); | 232 return Init(); |
| 247 } | 233 } |
| 248 | 234 |
| 249 bool CXML_Parser::Init(bool bOwndedStream) { | 235 bool CXML_Parser::Init() { |
| 250 m_bOwnedStream = bOwndedStream; | |
| 251 m_nOffset = 0; | 236 m_nOffset = 0; |
| 252 return ReadNextBlock(); | 237 return ReadNextBlock(); |
| 253 } | 238 } |
| 254 | 239 |
| 255 bool CXML_Parser::ReadNextBlock() { | 240 bool CXML_Parser::ReadNextBlock() { |
| 256 if (!m_pDataAcc->ReadNextBlock()) | 241 if (!m_pDataAcc->ReadNextBlock()) |
| 257 return false; | 242 return false; |
| 258 | 243 |
| 259 m_pBuffer = m_pDataAcc->GetBlockBuffer(); | 244 m_pBuffer = m_pDataAcc->GetBlockBuffer(); |
| 260 m_dwBufferSize = m_pDataAcc->GetBlockSize(); | 245 m_dwBufferSize = m_pDataAcc->GetBlockSize(); |
| (...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 694 CXML_Element* CXML_Element::Parse(const void* pBuffer, | 679 CXML_Element* CXML_Element::Parse(const void* pBuffer, |
| 695 size_t size, | 680 size_t size, |
| 696 bool bSaveSpaceChars, | 681 bool bSaveSpaceChars, |
| 697 FX_FILESIZE* pParsedSize) { | 682 FX_FILESIZE* pParsedSize) { |
| 698 CXML_Parser parser; | 683 CXML_Parser parser; |
| 699 if (!parser.Init((uint8_t*)pBuffer, size)) { | 684 if (!parser.Init((uint8_t*)pBuffer, size)) { |
| 700 return nullptr; | 685 return nullptr; |
| 701 } | 686 } |
| 702 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); | 687 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); |
| 703 } | 688 } |
| 704 CXML_Element* CXML_Element::Parse(IFX_SeekableReadStream* pFile, | 689 |
| 705 bool bSaveSpaceChars, | 690 CXML_Element* CXML_Element::Parse( |
| 706 FX_FILESIZE* pParsedSize) { | 691 const CFX_RetainPtr<IFX_SeekableReadStream>& pFile, |
| 692 bool bSaveSpaceChars, |
| 693 FX_FILESIZE* pParsedSize) { |
| 707 CXML_Parser parser; | 694 CXML_Parser parser; |
| 708 if (!parser.Init(pFile)) { | 695 if (!parser.Init(pFile)) |
| 709 return nullptr; | 696 return nullptr; |
| 710 } | 697 |
| 711 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); | 698 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); |
| 712 } | 699 } |
| 713 CXML_Element* CXML_Element::Parse(IFX_BufferedReadStream* pBuffer, | 700 |
| 714 bool bSaveSpaceChars, | 701 CXML_Element* CXML_Element::Parse( |
| 715 FX_FILESIZE* pParsedSize) { | 702 const CFX_RetainPtr<IFX_BufferedReadStream>& pBuffer, |
| 703 bool bSaveSpaceChars, |
| 704 FX_FILESIZE* pParsedSize) { |
| 716 CXML_Parser parser; | 705 CXML_Parser parser; |
| 717 if (!parser.Init(pBuffer)) { | 706 if (!parser.Init(pBuffer)) |
| 718 return nullptr; | 707 return nullptr; |
| 719 } | 708 |
| 720 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); | 709 return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); |
| 721 } | 710 } |
| 711 |
| 722 CXML_Element::CXML_Element() : m_QSpaceName(), m_TagName(), m_AttrMap() {} | 712 CXML_Element::CXML_Element() : m_QSpaceName(), m_TagName(), m_AttrMap() {} |
| 723 CXML_Element::CXML_Element(const CFX_ByteStringC& qSpace, | 713 CXML_Element::CXML_Element(const CFX_ByteStringC& qSpace, |
| 724 const CFX_ByteStringC& tagName) | 714 const CFX_ByteStringC& tagName) |
| 725 : m_QSpaceName(), m_TagName(), m_AttrMap() { | 715 : m_QSpaceName(), m_TagName(), m_AttrMap() { |
| 726 m_QSpaceName = qSpace; | 716 m_QSpaceName = qSpace; |
| 727 m_TagName = tagName; | 717 m_TagName = tagName; |
| 728 } | 718 } |
| 729 CXML_Element::CXML_Element(const CFX_ByteStringC& qTagName) | 719 CXML_Element::CXML_Element(const CFX_ByteStringC& qTagName) |
| 730 : m_pParent(nullptr), m_QSpaceName(), m_TagName(), m_AttrMap() { | 720 : m_pParent(nullptr), m_QSpaceName(), m_TagName(), m_AttrMap() { |
| 731 SetTag(qTagName); | 721 SetTag(qTagName); |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 957 m_pMap->push_back({space, name, CFX_WideString(value)}); | 947 m_pMap->push_back({space, name, CFX_WideString(value)}); |
| 958 } | 948 } |
| 959 | 949 |
| 960 int CXML_AttrMap::GetSize() const { | 950 int CXML_AttrMap::GetSize() const { |
| 961 return m_pMap ? pdfium::CollectionSize<int>(*m_pMap) : 0; | 951 return m_pMap ? pdfium::CollectionSize<int>(*m_pMap) : 0; |
| 962 } | 952 } |
| 963 | 953 |
| 964 CXML_AttrItem& CXML_AttrMap::GetAt(int index) const { | 954 CXML_AttrItem& CXML_AttrMap::GetAt(int index) const { |
| 965 return (*m_pMap)[index]; | 955 return (*m_pMap)[index]; |
| 966 } | 956 } |
| OLD | NEW |