No public description

PiperOrigin-RevId: 879790475
diff --git a/fuzztest/internal/BUILD b/fuzztest/internal/BUILD
index c5d988a..c016da5 100644
--- a/fuzztest/internal/BUILD
+++ b/fuzztest/internal/BUILD
@@ -372,6 +372,7 @@
         ":serialization",
         ":status",
         "@abseil-cpp//absl/base:core_headers",
+        "@abseil-cpp//absl/cleanup",
         "@abseil-cpp//absl/functional:any_invocable",
         "@abseil-cpp//absl/functional:bind_front",
         "@abseil-cpp//absl/functional:function_ref",
diff --git a/fuzztest/internal/CMakeLists.txt b/fuzztest/internal/CMakeLists.txt
index 1a674bc..ffd91d3 100644
--- a/fuzztest/internal/CMakeLists.txt
+++ b/fuzztest/internal/CMakeLists.txt
@@ -341,6 +341,7 @@
     fuzztest::sanitizer_interface
     fuzztest::serialization
     fuzztest::status
+    absl::cleanup
     absl::core_headers
     absl::any_invocable
     absl::bind_front
diff --git a/fuzztest/internal/googletest_adaptor.h b/fuzztest/internal/googletest_adaptor.h
index 98e8a8a..ba107eb 100644
--- a/fuzztest/internal/googletest_adaptor.h
+++ b/fuzztest/internal/googletest_adaptor.h
@@ -93,6 +93,7 @@
       EXPECT_TRUE(test->RunInFuzzingMode(argc_, argv_, configuration_))
           << "Failure(s) found in the fuzzing mode.";
     }
+    EXPECT_FALSE(Runtime::instance().external_failure_detected());
   }
 
   static void SetUpTestSuite() {
diff --git a/fuzztest/internal/runtime.cc b/fuzztest/internal/runtime.cc
index 24e094f..6d56282 100644
--- a/fuzztest/internal/runtime.cc
+++ b/fuzztest/internal/runtime.cc
@@ -38,6 +38,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/cleanup/cleanup.h"
 #include "absl/functional/bind_front.h"
 #include "absl/functional/function_ref.h"
 #include "absl/random/bit_gen_ref.h"
@@ -576,6 +577,10 @@
   if (!has_old_handler || signum != SIGTRAP ||
       (info->si_code != TRAP_PERF && info->si_code != SI_TIMER)) {
     // Dump our info first.
+    absl::Format(&signal_out_sink,
+                 "[!] Reporting crashing signal %d as an external failure.\n",
+                 signum);
+    runtime.SetExternalFailureDetected(true);
     runtime.PrintReport(&signal_out_sink);
     // The old signal handler might print important messages (e.g., strack
     // trace) to the original file descriptors, therefore we restore them before
@@ -597,7 +602,7 @@
     raise(signum);
     absl::Format(&signal_out_sink,
                  "[!] The default action of crashing signal %d did not crash - "
-                 "aborting",
+                 "aborting\n",
                  signum);
     // At this point abort should be fine even if signum == SIGABRT.
     std::abort();
@@ -751,7 +756,11 @@
     const Configuration& configuration) {
   // Crashing inputs are discovered in fuzzing mode. To increase the chance of
   // reproducing the crash, fuzzing mode should be used.
+  const auto old_run_mode = runtime_.run_mode();
   runtime_.SetRunMode(RunMode::kFuzz);
+  absl::Cleanup restore_run_mode = [this, old_run_mode]() {
+    runtime_.SetRunMode(old_run_mode);
+  };
 
   auto replay_input = absl::bind_front(&FuzzTestFuzzerImpl::ReplayInput, this);
   if (const auto file_paths = GetFilesToReplay()) {