From ceab166b7dafc2bb514755e4a017bf178d0c8e8b Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Tue, 20 Feb 2018 22:04:09 +0000 Subject: [formcalc] Do not convert if to an identifier The if token in formcalc is an internal keyword and can not be used as an identifier. The current if parsing code will turn if into an identifier if it fails to find the 'then' statement after the argument list. This should be a failed parse instead of coverting if to an identifier and resetting the lexer. Change-Id: Ieebf6a1aabc27482fcaeaf7a9bd4be40fc01e9ad Reviewed-on: https://pdfium-review.googlesource.com/27430 Commit-Queue: Ryan Harrison Reviewed-by: Ryan Harrison --- xfa/fxfa/fm2js/cxfa_fmlexer.h | 3 --- xfa/fxfa/fm2js/cxfa_fmparser.cpp | 11 ++++------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/xfa/fxfa/fm2js/cxfa_fmlexer.h b/xfa/fxfa/fm2js/cxfa_fmlexer.h index c0156f72f7..3864abb0eb 100644 --- a/xfa/fxfa/fm2js/cxfa_fmlexer.h +++ b/xfa/fxfa/fm2js/cxfa_fmlexer.h @@ -110,9 +110,6 @@ class CXFA_FMLexer { CXFA_FMToken NextToken(); - const wchar_t* GetPos() { return m_cursor; } - void SetPos(const wchar_t* pos) { m_cursor = pos; } - private: CXFA_FMToken AdvanceForNumber(); CXFA_FMToken AdvanceForString(); diff --git a/xfa/fxfa/fm2js/cxfa_fmparser.cpp b/xfa/fxfa/fm2js/cxfa_fmparser.cpp index a103183c38..fc8c58511a 100644 --- a/xfa/fxfa/fm2js/cxfa_fmparser.cpp +++ b/xfa/fxfa/fm2js/cxfa_fmparser.cpp @@ -938,8 +938,6 @@ std::unique_ptr CXFA_FMParser::ParseIfExpression() { AutoRestorer restorer(&m_parse_depth); if (HasError() || !IncrementParseDepthAndCheck()) return nullptr; - - const wchar_t* pStartPos = m_lexer->GetPos(); if (!NextToken() || !CheckThenNext(TOKlparen)) return nullptr; @@ -955,13 +953,12 @@ std::unique_ptr CXFA_FMParser::ParseIfExpression() { } if (!CheckThenNext(TOKrparen)) return nullptr; + if (m_token.m_type != TOKthen) { - m_token = CXFA_FMToken(TOKidentifier); - m_token.m_string = L"if"; - m_lexer->SetPos(pStartPos); - return ParseExpExpression(); + m_error = true; + return nullptr; } - if (!CheckThenNext(TOKthen)) + if (!NextToken()) return nullptr; std::unique_ptr pIfExpression = ParseBlockExpression(); -- cgit v1.2.3