Fix crash when NinjaBuildWriter::RunAndWriteFile fails All paths that return `false` must also assign to `err` so that commands::RunGen doesn't crash when it prints the error to stdout. Bug: 384523565 Change-Id: I1b440b841a5cddfba86eda7eb48a447025004e7f Reviewed-on: https://gn-review.googlesource.com/c/gn/+/18000 Reviewed-by: Dirk Pranke <dpranke@google.com> Commit-Queue: Dirk Pranke <dpranke@google.com> Reviewed-by: David Turner <digit@google.com>
diff --git a/src/gn/ninja_build_writer.cc b/src/gn/ninja_build_writer.cc index f959bfa..5349948 100644 --- a/src/gn/ninja_build_writer.cc +++ b/src/gn/ninja_build_writer.cc
@@ -272,8 +272,10 @@ std::string ninja_contents = file.str(); if (util::WriteFileAtomically(ninja_file_name, ninja_contents.data(), static_cast<int>(ninja_contents.size())) != - static_cast<int>(ninja_contents.size())) + static_cast<int>(ninja_contents.size())) { + *err = Err(Location(), "Failed to write build.ninja."); return false; + } // Dep file listing build dependencies. base::FilePath dep_file_name(build_settings->GetFullPath( @@ -281,8 +283,10 @@ std::string dep_contents = depfile.str(); if (util::WriteFileAtomically(dep_file_name, dep_contents.data(), static_cast<int>(dep_contents.size())) != - static_cast<int>(dep_contents.size())) + static_cast<int>(dep_contents.size())) { + *err = Err(Location(), "Failed to write build.ninja.d"); return false; + } // Finally, write the empty build.ninja.stamp file. This is the output // expected by the first of the two ninja rules used to accomplish @@ -293,8 +297,10 @@ std::string stamp_contents; if (util::WriteFileAtomically(stamp_file_name, stamp_contents.data(), static_cast<int>(stamp_contents.size())) != - static_cast<int>(stamp_contents.size())) + static_cast<int>(stamp_contents.size())) { + *err = Err(Location(), "Failed to write build.ninja.stamp."); return false; + } return true; }