gn: Don't read unitialized memory on files containing just a comment. The BlockNode::GetRange() of a block containing nothing doesn't have an initialized bytes_ member. Skip empty nodes, they'll be assinged to the file block further down. Patch sketch by scottmg. BUG=640856 Review-Url: https://codereview.chromium.org/2271383003 Cr-Original-Commit-Position: refs/heads/master@{#414522} Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src Cr-Mirrored-Commit: c3b455922b7ddb748e9a7b351cac7a4586c7e374
diff --git a/tools/gn/parser.cc b/tools/gn/parser.cc index 41ee6b6..e256d2d 100644 --- a/tools/gn/parser.cc +++ b/tools/gn/parser.cc
@@ -454,7 +454,7 @@ } std::unique_ptr<ParseNode> Parser::Block(Token token) { - // This entrypoing into ParseBlock means its part of an expression and we + // This entrypoint into ParseBlock means it's part of an expression and we // always want the result. return ParseBlock(token, BlockNode::RETURNS_SCOPE); } @@ -820,6 +820,10 @@ // Assign line comments to syntax immediately following. int cur_comment = 0; for (auto* node : pre) { + if (node->GetRange().is_null()) { + CHECK_EQ(node, file) << "Only expected on top file node"; + continue; + } const Location& start = node->GetRange().begin(); while (cur_comment < static_cast<int>(line_comment_tokens_.size())) { if (start.byte() >= line_comment_tokens_[cur_comment].location().byte()) {