Skip to content

Commit

Permalink
Shell: Disallow non-bareword nodes as part of a heredoc key
Browse files Browse the repository at this point in the history
  • Loading branch information
alimpfard authored and awesomekling committed May 1, 2021
1 parent f18895c commit f1d49d3
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions Userland/Shell/Parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1943,10 +1943,14 @@ RefPtr<AST::Node> Parser::parse_heredoc_initiation_record()

// StringLiteral | bareword
if (auto bareword = parse_bareword()) {
if (bareword->is_syntax_error())
syntax_error_node = bareword->syntax_error_node();
else
record.end = static_cast<AST::BarewordLiteral*>(bareword.ptr())->text();
if (!bareword->is_bareword()) {
syntax_error_node = create<AST::SyntaxError>(String::formatted("Expected a bareword or a quoted string, not {}", bareword->class_name()));
} else {
if (bareword->is_syntax_error())
syntax_error_node = bareword->syntax_error_node();
else
record.end = static_cast<AST::BarewordLiteral*>(bareword.ptr())->text();
}

record.interpolate = true;
} else if (peek() == '\'') {
Expand Down Expand Up @@ -1981,6 +1985,10 @@ bool Parser::parse_heredoc_entries()
// Try to parse heredoc entries, as reverse recorded in the initiation records
for (auto& record : m_heredoc_initiations) {
auto rule_start = push_start();
if (m_rule_start_offsets.size() > max_allowed_nested_rule_depth) {
record.node->set_is_syntax_error(*create<AST::SyntaxError>(String::formatted("Expression nested too deep (max allowed is {})", max_allowed_nested_rule_depth)));
continue;
}
bool found_key = false;
if (!record.interpolate) {
// Since no interpolation is allowed, just read lines until we hit the key
Expand Down

0 comments on commit f1d49d3

Please sign in to comment.