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;
}