summaryrefslogtreecommitdiff
path: root/xfa/fgas
diff options
context:
space:
mode:
authordsinclair <dsinclair@chromium.org>2016-03-31 09:45:20 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-31 09:45:20 -0700
commit11ac93cfdb9f4f25eee2ba60b947f992ab40ec54 (patch)
tree9738d127550a1aaa47e8828c3890c842da7dcf6f /xfa/fgas
parent5a839e938bad5b766a928fb545f0b0aba39e3829 (diff)
downloadpdfium-11ac93cfdb9f4f25eee2ba60b947f992ab40ec54.tar.xz
Fix CData parsing in CFDE_XMLSyntaxParser.
This CL splits the handling of CData sections out to an individual phase of the parser. This fixes the issue with the CData parser getting confused by < characters inside the data section. BUG=pdfium:90 Review URL: https://codereview.chromium.org/1842633004
Diffstat (limited to 'xfa/fgas')
-rw-r--r--xfa/fgas/crt/fgas_stream.cpp6
-rw-r--r--xfa/fgas/crt/fgas_system.cpp3
2 files changed, 6 insertions, 3 deletions
diff --git a/xfa/fgas/crt/fgas_stream.cpp b/xfa/fgas/crt/fgas_stream.cpp
index 8ab2f9fd37..94468e23da 100644
--- a/xfa/fgas/crt/fgas_stream.cpp
+++ b/xfa/fgas/crt/fgas_stream.cpp
@@ -870,8 +870,9 @@ int32_t CFX_BufferStreamImp::ReadString(FX_WCHAR* pStr,
}
const FX_WCHAR* pSrc = (const FX_WCHAR*)(FX_CHAR*)(m_pData + m_iPosition);
int32_t iCount = 0;
- while (*pSrc != L'\0' && iCount < iLen) {
- *pStr++ = *pSrc++, iCount++;
+ while (*pSrc && iCount < iLen) {
+ *pStr++ = *pSrc++;
+ iCount++;
}
m_iPosition += iCount * 2;
bEOS = (*pSrc == L'\0') || (m_iPosition >= m_iLength);
@@ -1345,6 +1346,7 @@ int32_t CFX_Stream::ReadString(FX_WCHAR* pStr,
}
return iLen;
}
+
int32_t CFX_Stream::WriteData(const uint8_t* pBuffer, int32_t iBufferSize) {
FXSYS_assert(pBuffer != NULL && iBufferSize > 0);
if (m_pStreamImp == NULL) {
diff --git a/xfa/fgas/crt/fgas_system.cpp b/xfa/fgas/crt/fgas_system.cpp
index df1a9d044a..7ba2d924ca 100644
--- a/xfa/fgas/crt/fgas_system.cpp
+++ b/xfa/fgas/crt/fgas_system.cpp
@@ -31,7 +31,8 @@ inline int32_t FX_tolower(int32_t ch) {
int32_t FX_wcsnicmp(const FX_WCHAR* s1, const FX_WCHAR* s2, size_t count) {
FXSYS_assert(s1 != NULL && s2 != NULL && count > 0);
- FX_WCHAR wch1 = 0, wch2 = 0;
+ FX_WCHAR wch1 = 0;
+ FX_WCHAR wch2 = 0;
while (count-- > 0) {
wch1 = (FX_WCHAR)FX_tolower(*s1++);
wch2 = (FX_WCHAR)FX_tolower(*s2++);