From 3523c1f23e4c48850fcba5b1cb1bd8f311407e00 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Tue, 22 Mar 2016 16:05:18 -0700 Subject: Fix parsing of double dot operators for FormCalc Patch by cherycherian. patch from issue 1810153003 at patchset 1 (http://crrev.com/1810153003#ps1) FormCalc expressions containing double-dot operators in SOM expressions were failing since XFA_ResolveNodes_AnyChild was always stripping the leading character. Roll testing/corpus to d671154 to pick up the test. BUG=pdfium:434 TBR=dsinclair@chromium.org Review URL: https://codereview.chromium.org/1821413002 . --- xfa/fxfa/parser/xfa_script_resolveprocessor.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'xfa/fxfa/parser/xfa_script_resolveprocessor.cpp') diff --git a/xfa/fxfa/parser/xfa_script_resolveprocessor.cpp b/xfa/fxfa/parser/xfa_script_resolveprocessor.cpp index b40d714ec9..cb5c039f75 100644 --- a/xfa/fxfa/parser/xfa_script_resolveprocessor.cpp +++ b/xfa/fxfa/parser/xfa_script_resolveprocessor.cpp @@ -52,6 +52,7 @@ int32_t CXFA_ResolveProcessor::XFA_ResolveNodes(CXFA_ResolveNodesData& rnd) { return XFA_ResolveNodes_NumberSign(rnd); case '*': return XFA_ResolveNodes_Asterisk(rnd); + // TODO(dsinclair@chromium.org): We could probably remove this. case '.': return XFA_ResolveNodes_AnyChild(rnd); default: @@ -85,7 +86,7 @@ int32_t CXFA_ResolveProcessor::XFA_ResolveNodes(CXFA_ResolveNodesData& rnd) { } int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_AnyChild( CXFA_ResolveNodesData& rnd) { - CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); + CFX_WideString wsName = rnd.m_wsName; CFX_WideString wsCondition = rnd.m_wsCondition; CXFA_Node* findNode = NULL; CXFA_NodeArray siblings; @@ -546,7 +547,7 @@ int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_GetFilter( continue; } if (nNameCount == 0) { - pNameBuf[nNameCount++] = wCur; + rnd.m_dwStyles |= XFA_RESOLVENODE_AnyChild; continue; } FX_WCHAR wLookahead = nStart < iLength ? pSrc[nStart] : 0; -- cgit v1.2.3