diff options
-rw-r--r-- | xfa/fxfa/fm2js/cxfa_fmparser.cpp | 5 | ||||
-rw-r--r-- | xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp | 20 |
2 files changed, 25 insertions, 0 deletions
diff --git a/xfa/fxfa/fm2js/cxfa_fmparser.cpp b/xfa/fxfa/fm2js/cxfa_fmparser.cpp index f000066a19..20e0fa6d1c 100644 --- a/xfa/fxfa/fm2js/cxfa_fmparser.cpp +++ b/xfa/fxfa/fm2js/cxfa_fmparser.cpp @@ -911,6 +911,8 @@ std::unique_ptr<CXFA_FMExpression> CXFA_FMParser::ParseIfExpression() { return nullptr; std::unique_ptr<CXFA_FMSimpleExpression> pCondition = ParseParenExpression(); + if (!pCondition) + return nullptr; if (!CheckThenNext(TOKthen)) return nullptr; @@ -923,6 +925,8 @@ std::unique_ptr<CXFA_FMExpression> CXFA_FMParser::ParseIfExpression() { return nullptr; auto elseIfCondition = ParseParenExpression(); + if (!elseIfCondition) + return nullptr; if (!CheckThenNext(TOKthen)) return nullptr; @@ -969,6 +973,7 @@ std::unique_ptr<CXFA_FMExpression> CXFA_FMParser::ParseWhileExpression() { std::move(pCondition), pdfium::MakeUnique<CXFA_FMBlockExpression>(std::move(exprs))); } + // For := 'for' Assignment 'upto' Accessor ('step' SimpleExpression)? // 'do' ExpressionList 'endfor' | // 'for' Assignment 'downto' Accessor ('step' SimpleExpression)? diff --git a/xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp b/xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp index 52de964f65..5ee27b189e 100644 --- a/xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp +++ b/xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp @@ -218,3 +218,23 @@ TEST(CXFA_FMParserTest, ParseFuncWithBadParamsList) { ASSERT_TRUE(ast == nullptr); EXPECT_TRUE(parser->HasError()); } + +TEST(CXFA_FMParserTest, ParseBadIfExpression) { + const wchar_t input[] = {L"if ( then"}; + + auto parser = pdfium::MakeUnique<CXFA_FMParser>(input); + std::unique_ptr<CXFA_FMAST> ast = parser->Parse(); + ASSERT_TRUE(ast == nullptr); + EXPECT_TRUE(parser->HasError()); +} + +TEST(CXFA_FMParserTest, ParseBadElseIfExpression) { + const wchar_t input[] = { + L"if ($ ne -1) then\n" + L"elseif( then"}; + + auto parser = pdfium::MakeUnique<CXFA_FMParser>(input); + std::unique_ptr<CXFA_FMAST> ast = parser->Parse(); + ASSERT_TRUE(ast == nullptr); + EXPECT_TRUE(parser->HasError()); +} |