Commit c3a68921 authored by Joshua Peraza's avatar Joshua Peraza Committed by Commit Bot

Update Crashpad to 91781418bc4eb79e357687094811bab6430b10b2

7786acf0d7a2 win: move string_number_conversion_test asan/dll disabling
             into the win clause
0ad7e1fbbe29 [fuchsia] disable
             MinidumpStringWriter.ConvertInvalidUTF8ToUTF16
39d73623dd1e Add jperaza to CONTRIBUTORS
91781418bc4e linux: Add CrashWithoutDump()

Change-Id: If1fb0547ef2071100ef016026f65ac99cbd74357
Reviewed-on: https://chromium-review.googlesource.com/c/1258318Reviewed-by: default avatarMark Mentovai <mark@chromium.org>
Commit-Queue: Joshua Peraza <jperaza@chromium.org>
Cr-Commit-Position: refs/heads/master@{#596082}
parent 46f6db56
...@@ -2,7 +2,7 @@ Name: Crashpad ...@@ -2,7 +2,7 @@ Name: Crashpad
Short Name: crashpad Short Name: crashpad
URL: https://crashpad.chromium.org/ URL: https://crashpad.chromium.org/
Version: unknown Version: unknown
Revision: 688dcfa22ee906f83d49b905b69c7c53347c92d9 Revision: 91781418bc4eb79e357687094811bab6430b10b2
License: Apache 2.0 License: Apache 2.0
License File: crashpad/LICENSE License File: crashpad/LICENSE
Security Critical: yes Security Critical: yes
......
...@@ -12,3 +12,4 @@ ...@@ -12,3 +12,4 @@
Mark Mentovai <mark@chromium.org> Mark Mentovai <mark@chromium.org>
Robert Sesek <rsesek@chromium.org> Robert Sesek <rsesek@chromium.org>
Scott Graham <scottmg@chromium.org> Scott Graham <scottmg@chromium.org>
Joshua Peraza <jperaza@chromium.org>
...@@ -266,6 +266,12 @@ class CrashpadClient { ...@@ -266,6 +266,12 @@ class CrashpadClient {
//! CaptureContext() or similar. //! CaptureContext() or similar.
static void DumpWithoutCrash(NativeCPUContext* context); static void DumpWithoutCrash(NativeCPUContext* context);
//! \brief Disables any installed crash handler, including any
//! FirstChanceHandler and crashes the current process.
//!
//! \param[in] message A message to be logged before crashing.
static void CrashWithoutDump(const std::string& message);
//! \brief The type for custom handlers installed by clients. //! \brief The type for custom handlers installed by clients.
using FirstChanceHandler = bool (*)(int, siginfo_t*, ucontext_t*); using FirstChanceHandler = bool (*)(int, siginfo_t*, ucontext_t*);
......
...@@ -78,28 +78,8 @@ std::vector<std::string> BuildAppProcessArgs( ...@@ -78,28 +78,8 @@ std::vector<std::string> BuildAppProcessArgs(
#endif // OS_ANDROID #endif // OS_ANDROID
class SignalHandler {
public:
virtual void HandleCrashFatal(int signo,
siginfo_t* siginfo,
void* context) = 0;
virtual bool HandleCrashNonFatal(int signo,
siginfo_t* siginfo,
void* context) = 0;
void SetFirstChanceHandler(CrashpadClient::FirstChanceHandler handler) {
first_chance_handler_ = handler;
}
protected:
SignalHandler() = default;
~SignalHandler() = default;
CrashpadClient::FirstChanceHandler first_chance_handler_ = nullptr;
};
// Launches a single use handler to snapshot this process. // Launches a single use handler to snapshot this process.
class LaunchAtCrashHandler : public SignalHandler { class LaunchAtCrashHandler {
public: public:
static LaunchAtCrashHandler* Get() { static LaunchAtCrashHandler* Get() {
static LaunchAtCrashHandler* instance = new LaunchAtCrashHandler(); static LaunchAtCrashHandler* instance = new LaunchAtCrashHandler();
...@@ -123,9 +103,7 @@ class LaunchAtCrashHandler : public SignalHandler { ...@@ -123,9 +103,7 @@ class LaunchAtCrashHandler : public SignalHandler {
return Signals::InstallCrashHandlers(HandleCrash, 0, nullptr); return Signals::InstallCrashHandlers(HandleCrash, 0, nullptr);
} }
bool HandleCrashNonFatal(int signo, bool HandleCrashNonFatal(int signo, siginfo_t* siginfo, void* context) {
siginfo_t* siginfo,
void* context) override {
if (first_chance_handler_ && if (first_chance_handler_ &&
first_chance_handler_( first_chance_handler_(
signo, siginfo, static_cast<ucontext_t*>(context))) { signo, siginfo, static_cast<ucontext_t*>(context))) {
...@@ -162,13 +140,19 @@ class LaunchAtCrashHandler : public SignalHandler { ...@@ -162,13 +140,19 @@ class LaunchAtCrashHandler : public SignalHandler {
return false; return false;
} }
void HandleCrashFatal(int signo, siginfo_t* siginfo, void* context) override { void HandleCrashFatal(int signo, siginfo_t* siginfo, void* context) {
if (HandleCrashNonFatal(signo, siginfo, context)) { if (enabled_ && HandleCrashNonFatal(signo, siginfo, context)) {
return; return;
} }
Signals::RestoreHandlerAndReraiseSignalOnReturn(siginfo, nullptr); Signals::RestoreHandlerAndReraiseSignalOnReturn(siginfo, nullptr);
} }
void SetFirstChanceHandler(CrashpadClient::FirstChanceHandler handler) {
first_chance_handler_ = handler;
}
static void Disable() { enabled_ = false; }
private: private:
LaunchAtCrashHandler() = default; LaunchAtCrashHandler() = default;
...@@ -183,16 +167,20 @@ class LaunchAtCrashHandler : public SignalHandler { ...@@ -183,16 +167,20 @@ class LaunchAtCrashHandler : public SignalHandler {
std::vector<const char*> argv_; std::vector<const char*> argv_;
std::vector<std::string> envp_strings_; std::vector<std::string> envp_strings_;
std::vector<const char*> envp_; std::vector<const char*> envp_;
bool set_envp_ = false;
ExceptionInformation exception_information_; ExceptionInformation exception_information_;
CrashpadClient::FirstChanceHandler first_chance_handler_ = nullptr;
bool set_envp_ = false;
static thread_local bool enabled_;
DISALLOW_COPY_AND_ASSIGN(LaunchAtCrashHandler); DISALLOW_COPY_AND_ASSIGN(LaunchAtCrashHandler);
}; };
thread_local bool LaunchAtCrashHandler::enabled_ = true;
// A pointer to the currently installed crash signal handler. This allows // A pointer to the currently installed crash signal handler. This allows
// the static method CrashpadClient::DumpWithoutCrashing to simulate a crash // the static method CrashpadClient::DumpWithoutCrashing to simulate a crash
// using the currently configured crash handling strategy. // using the currently configured crash handling strategy.
static SignalHandler* g_crash_handler; static LaunchAtCrashHandler* g_crash_handler;
} // namespace } // namespace
...@@ -318,6 +306,12 @@ void CrashpadClient::DumpWithoutCrash(NativeCPUContext* context) { ...@@ -318,6 +306,12 @@ void CrashpadClient::DumpWithoutCrash(NativeCPUContext* context) {
siginfo.si_signo, &siginfo, reinterpret_cast<void*>(context)); siginfo.si_signo, &siginfo, reinterpret_cast<void*>(context));
} }
// static
void CrashpadClient::CrashWithoutDump(const std::string& message) {
LaunchAtCrashHandler::Disable();
LOG(FATAL) << message;
}
// static // static
void CrashpadClient::SetFirstChanceExceptionHandler( void CrashpadClient::SetFirstChanceExceptionHandler(
FirstChanceHandler handler) { FirstChanceHandler handler) {
......
...@@ -154,6 +154,10 @@ source_set("minidump_test") { ...@@ -154,6 +154,10 @@ source_set("minidump_test") {
"minidump_writable_test.cc", "minidump_writable_test.cc",
] ]
configs += [
"../build:crashpad_is_in_fuchsia",
]
deps = [ deps = [
":test_support", ":test_support",
"../snapshot:test_support", "../snapshot:test_support",
......
...@@ -100,6 +100,12 @@ TEST(MinidumpStringWriter, MinidumpUTF16StringWriter) { ...@@ -100,6 +100,12 @@ TEST(MinidumpStringWriter, MinidumpUTF16StringWriter) {
} }
} }
// Related tracking issues:
// https://fuchsia.atlassian.net/browse/DX-487
// https://bugs.chromium.org/p/chromium/issues/detail?id=872892
// https://bugs.chromium.org/p/chromium/issues/detail?id=889582
// TODO: Re-enable test once LUCI supports invalid UTF8 characters in test logs.
#if !defined(CRASHPAD_IS_IN_FUCHSIA)
TEST(MinidumpStringWriter, ConvertInvalidUTF8ToUTF16) { TEST(MinidumpStringWriter, ConvertInvalidUTF8ToUTF16) {
StringFile string_file; StringFile string_file;
...@@ -139,6 +145,7 @@ TEST(MinidumpStringWriter, ConvertInvalidUTF8ToUTF16) { ...@@ -139,6 +145,7 @@ TEST(MinidumpStringWriter, ConvertInvalidUTF8ToUTF16) {
EXPECT_NE(output_string.find(0xfffd), base::string16::npos); EXPECT_NE(output_string.find(0xfffd), base::string16::npos);
} }
} }
#endif // !defined(CRASHPAD_IS_IN_FUCHSIA)
TEST(MinidumpStringWriter, MinidumpUTF8StringWriter) { TEST(MinidumpStringWriter, MinidumpUTF8StringWriter) {
StringFile string_file; StringFile string_file;
......
...@@ -642,11 +642,9 @@ source_set("util_test") { ...@@ -642,11 +642,9 @@ source_set("util_test") {
"win/session_end_watcher_test.cc", "win/session_end_watcher_test.cc",
] ]
if (crashpad_is_in_chromium) { if (crashpad_is_in_chromium && is_asan && is_component_build) {
if (is_asan && is_component_build) { # TODO(crbug.com/856174): Re-enable these once Windows ASan is fixed.
# TODO(crbug.com/856174): Re-enable these once Windows ASan is fixed. sources -= [ "stdlib/string_number_conversion_test.cc" ]
sources -= [ "stdlib/string_number_conversion_test.cc" ]
}
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment