| 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 "xfa/fgas/xml/fgas_sax_imp.h" | 7 #include "xfa/fgas/xml/fgas_sax_imp.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| 11 namespace { | 11 namespace { |
| 12 | 12 |
| 13 const FX_DWORD kSaxFileBufSize = 32768; | 13 const uint32_t kSaxFileBufSize = 32768; |
| 14 | 14 |
| 15 } // namespace | 15 } // namespace |
| 16 | 16 |
| 17 IFX_SAXReader* FX_SAXReader_Create() { | 17 IFX_SAXReader* FX_SAXReader_Create() { |
| 18 return new CFX_SAXReader; | 18 return new CFX_SAXReader; |
| 19 } | 19 } |
| 20 CFX_SAXFile::CFX_SAXFile() | 20 CFX_SAXFile::CFX_SAXFile() |
| 21 : m_pFile(NULL), | 21 : m_pFile(NULL), |
| 22 m_dwStart(0), | 22 m_dwStart(0), |
| 23 m_dwEnd(0), | 23 m_dwEnd(0), |
| 24 m_dwCur(0), | 24 m_dwCur(0), |
| 25 m_pBuf(NULL), | 25 m_pBuf(NULL), |
| 26 m_dwBufSize(0), | 26 m_dwBufSize(0), |
| 27 m_dwBufIndex(0) {} | 27 m_dwBufIndex(0) {} |
| 28 FX_BOOL CFX_SAXFile::StartFile(IFX_FileRead* pFile, | 28 FX_BOOL CFX_SAXFile::StartFile(IFX_FileRead* pFile, |
| 29 FX_DWORD dwStart, | 29 uint32_t dwStart, |
| 30 FX_DWORD dwLen) { | 30 uint32_t dwLen) { |
| 31 FXSYS_assert(m_pFile == NULL && pFile != NULL); | 31 FXSYS_assert(m_pFile == NULL && pFile != NULL); |
| 32 FX_DWORD dwSize = pFile->GetSize(); | 32 uint32_t dwSize = pFile->GetSize(); |
| 33 if (dwStart >= dwSize) { | 33 if (dwStart >= dwSize) { |
| 34 return FALSE; | 34 return FALSE; |
| 35 } | 35 } |
| 36 if (dwLen == -1 || dwStart + dwLen > dwSize) { | 36 if (dwLen == -1 || dwStart + dwLen > dwSize) { |
| 37 dwLen = dwSize - dwStart; | 37 dwLen = dwSize - dwStart; |
| 38 } | 38 } |
| 39 if (dwLen == 0) { | 39 if (dwLen == 0) { |
| 40 return FALSE; | 40 return FALSE; |
| 41 } | 41 } |
| 42 m_dwBufSize = std::min(dwLen, kSaxFileBufSize); | 42 m_dwBufSize = std::min(dwLen, kSaxFileBufSize); |
| 43 m_pBuf = FX_Alloc(uint8_t, m_dwBufSize); | 43 m_pBuf = FX_Alloc(uint8_t, m_dwBufSize); |
| 44 if (!pFile->ReadBlock(m_pBuf, dwStart, m_dwBufSize)) { | 44 if (!pFile->ReadBlock(m_pBuf, dwStart, m_dwBufSize)) { |
| 45 return FALSE; | 45 return FALSE; |
| 46 } | 46 } |
| 47 m_dwStart = dwStart; | 47 m_dwStart = dwStart; |
| 48 m_dwEnd = dwStart + dwLen; | 48 m_dwEnd = dwStart + dwLen; |
| 49 m_dwCur = dwStart; | 49 m_dwCur = dwStart; |
| 50 m_pFile = pFile; | 50 m_pFile = pFile; |
| 51 m_dwBufIndex = 0; | 51 m_dwBufIndex = 0; |
| 52 return TRUE; | 52 return TRUE; |
| 53 } | 53 } |
| 54 FX_BOOL CFX_SAXFile::ReadNextBlock() { | 54 FX_BOOL CFX_SAXFile::ReadNextBlock() { |
| 55 FXSYS_assert(m_pFile != NULL); | 55 FXSYS_assert(m_pFile != NULL); |
| 56 FX_DWORD dwSize = m_dwEnd - m_dwCur; | 56 uint32_t dwSize = m_dwEnd - m_dwCur; |
| 57 if (dwSize == 0) { | 57 if (dwSize == 0) { |
| 58 return FALSE; | 58 return FALSE; |
| 59 } | 59 } |
| 60 m_dwBufSize = std::min(dwSize, kSaxFileBufSize); | 60 m_dwBufSize = std::min(dwSize, kSaxFileBufSize); |
| 61 if (!m_pFile->ReadBlock(m_pBuf, m_dwCur, m_dwBufSize)) { | 61 if (!m_pFile->ReadBlock(m_pBuf, m_dwCur, m_dwBufSize)) { |
| 62 return FALSE; | 62 return FALSE; |
| 63 } | 63 } |
| 64 m_dwBufIndex = 0; | 64 m_dwBufIndex = 0; |
| 65 return TRUE; | 65 return TRUE; |
| 66 } | 66 } |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 m_iNameSize *= 2; | 162 m_iNameSize *= 2; |
| 163 } else { | 163 } else { |
| 164 m_iNameSize += 1024 * 1024; | 164 m_iNameSize += 1024 * 1024; |
| 165 } | 165 } |
| 166 m_pszName = (uint8_t*)FX_Realloc(uint8_t, m_pszName, m_iNameSize); | 166 m_pszName = (uint8_t*)FX_Realloc(uint8_t, m_pszName, m_iNameSize); |
| 167 } | 167 } |
| 168 inline FX_BOOL CFX_SAXReader::SkipSpace(uint8_t ch) { | 168 inline FX_BOOL CFX_SAXReader::SkipSpace(uint8_t ch) { |
| 169 return (m_dwParseMode & FX_SAXPARSEMODE_NotSkipSpace) == 0 && ch < 0x21; | 169 return (m_dwParseMode & FX_SAXPARSEMODE_NotSkipSpace) == 0 && ch < 0x21; |
| 170 } | 170 } |
| 171 int32_t CFX_SAXReader::StartParse(IFX_FileRead* pFile, | 171 int32_t CFX_SAXReader::StartParse(IFX_FileRead* pFile, |
| 172 FX_DWORD dwStart, | 172 uint32_t dwStart, |
| 173 FX_DWORD dwLen, | 173 uint32_t dwLen, |
| 174 FX_DWORD dwParseMode) { | 174 uint32_t dwParseMode) { |
| 175 m_iState = -1; | 175 m_iState = -1; |
| 176 Reset(); | 176 Reset(); |
| 177 if (!m_File.StartFile(pFile, dwStart, dwLen)) { | 177 if (!m_File.StartFile(pFile, dwStart, dwLen)) { |
| 178 return -1; | 178 return -1; |
| 179 } | 179 } |
| 180 m_iState = 0; | 180 m_iState = 0; |
| 181 m_eMode = FX_SAXMODE_Text; | 181 m_eMode = FX_SAXMODE_Text; |
| 182 m_ePrevMode = FX_SAXMODE_Text; | 182 m_ePrevMode = FX_SAXMODE_Text; |
| 183 m_bCharData = FALSE; | 183 m_bCharData = FALSE; |
| 184 m_dwDataOffset = 0; | 184 m_dwDataOffset = 0; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 202 &CFX_SAXReader::ParseMaybeClose, | 202 &CFX_SAXReader::ParseMaybeClose, |
| 203 &CFX_SAXReader::ParseTagClose, | 203 &CFX_SAXReader::ParseTagClose, |
| 204 &CFX_SAXReader::ParseTagEnd, | 204 &CFX_SAXReader::ParseTagEnd, |
| 205 &CFX_SAXReader::ParseTargetData, | 205 &CFX_SAXReader::ParseTargetData, |
| 206 }; | 206 }; |
| 207 int32_t CFX_SAXReader::ContinueParse(IFX_Pause* pPause) { | 207 int32_t CFX_SAXReader::ContinueParse(IFX_Pause* pPause) { |
| 208 if (m_iState < 0 || m_iState > 99) { | 208 if (m_iState < 0 || m_iState > 99) { |
| 209 return m_iState; | 209 return m_iState; |
| 210 } | 210 } |
| 211 while (m_File.m_dwCur < m_File.m_dwEnd) { | 211 while (m_File.m_dwCur < m_File.m_dwEnd) { |
| 212 FX_DWORD& index = m_File.m_dwBufIndex; | 212 uint32_t& index = m_File.m_dwBufIndex; |
| 213 FX_DWORD size = m_File.m_dwBufSize; | 213 uint32_t size = m_File.m_dwBufSize; |
| 214 const uint8_t* pBuf = m_File.m_pBuf; | 214 const uint8_t* pBuf = m_File.m_pBuf; |
| 215 while (index < size) { | 215 while (index < size) { |
| 216 m_CurByte = pBuf[index]; | 216 m_CurByte = pBuf[index]; |
| 217 (this->*g_FX_SAXReader_LPFParse[m_eMode])(); | 217 (this->*g_FX_SAXReader_LPFParse[m_eMode])(); |
| 218 index++; | 218 index++; |
| 219 } | 219 } |
| 220 m_File.m_dwCur += index; | 220 m_File.m_dwCur += index; |
| 221 m_iState = (m_File.m_dwCur - m_File.m_dwStart) * 100 / | 221 m_iState = (m_File.m_dwCur - m_File.m_dwStart) * 100 / |
| 222 (m_File.m_dwEnd - m_File.m_dwStart); | 222 (m_File.m_dwEnd - m_File.m_dwStart); |
| 223 if (m_File.m_dwCur >= m_File.m_dwEnd) { | 223 if (m_File.m_dwCur >= m_File.m_dwEnd) { |
| (...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 679 } | 679 } |
| 680 void CFX_SAXReader::SkipCurrentNode() { | 680 void CFX_SAXReader::SkipCurrentNode() { |
| 681 if (!m_pCurItem) { | 681 if (!m_pCurItem) { |
| 682 return; | 682 return; |
| 683 } | 683 } |
| 684 m_pCurItem->m_bSkip = TRUE; | 684 m_pCurItem->m_bSkip = TRUE; |
| 685 } | 685 } |
| 686 void CFX_SAXReader::SetHandler(IFX_SAXReaderHandler* pHandler) { | 686 void CFX_SAXReader::SetHandler(IFX_SAXReaderHandler* pHandler) { |
| 687 m_pHandler = pHandler; | 687 m_pHandler = pHandler; |
| 688 } | 688 } |
| OLD | NEW |