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
Short Name: crashpad
URL: https://crashpad.chromium.org/
Version: unknown
Revision: 688dcfa22ee906f83d49b905b69c7c53347c92d9
Revision: 91781418bc4eb79e357687094811bab6430b10b2
License: Apache 2.0
License File: crashpad/LICENSE
Security Critical: yes
......
......@@ -12,3 +12,4 @@
Mark Mentovai <mark@chromium.org>
Robert Sesek <rsesek@chromium.org>
Scott Graham <scottmg@chromium.org>
Joshua Peraza <jperaza@chromium.org>
......@@ -266,6 +266,12 @@ class CrashpadClient {
//! CaptureContext() or similar.
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.
using FirstChanceHandler = bool (*)(int, siginfo_t*, ucontext_t*);
......
......@@ -78,28 +78,8 @@ std::vector<std::string> BuildAppProcessArgs(
#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.
class LaunchAtCrashHandler : public SignalHandler {
class LaunchAtCrashHandler {
public:
static LaunchAtCrashHandler* Get() {
static LaunchAtCrashHandler* instance = new LaunchAtCrashHandler();
......@@ -123,9 +103,7 @@ class LaunchAtCrashHandler : public SignalHandler {
return Signals::InstallCrashHandlers(HandleCrash, 0, nullptr);
}
bool HandleCrashNonFatal(int signo,
siginfo_t* siginfo,
void* context) override {
bool HandleCrashNonFatal(int signo, siginfo_t* siginfo, void* context) {
if (first_chance_handler_ &&
first_chance_handler_(
signo, siginfo, static_cast<ucontext_t*>(context))) {
......@@ -162,13 +140,19 @@ class LaunchAtCrashHandler : public SignalHandler {
return false;
}
void HandleCrashFatal(int signo, siginfo_t* siginfo, void* context) override {
if (HandleCrashNonFatal(signo, siginfo, context)) {
void HandleCrashFatal(int signo, siginfo_t* siginfo, void* context) {
if (enabled_ && HandleCrashNonFatal(signo, siginfo, context)) {
return;
}
Signals::RestoreHandlerAndReraiseSignalOnReturn(siginfo, nullptr);
}
void SetFirstChanceHandler(CrashpadClient::FirstChanceHandler handler) {
first_chance_handler_ = handler;
}
static void Disable() { enabled_ = false; }
private:
LaunchAtCrashHandler() = default;
......@@ -183,16 +167,20 @@ class LaunchAtCrashHandler : public SignalHandler {
std::vector<const char*> argv_;
std::vector<std::string> envp_strings_;
std::vector<const char*> envp_;
bool set_envp_ = false;
ExceptionInformation exception_information_;
CrashpadClient::FirstChanceHandler first_chance_handler_ = nullptr;
bool set_envp_ = false;
static thread_local bool enabled_;
DISALLOW_COPY_AND_ASSIGN(LaunchAtCrashHandler);
};
thread_local bool LaunchAtCrashHandler::enabled_ = true;
// A pointer to the currently installed crash signal handler. This allows
// the static method CrashpadClient::DumpWithoutCrashing to simulate a crash
// using the currently configured crash handling strategy.
static SignalHandler* g_crash_handler;
static LaunchAtCrashHandler* g_crash_handler;
} // namespace
......@@ -318,6 +306,12 @@ void CrashpadClient::DumpWithoutCrash(NativeCPUContext* context) {
siginfo.si_signo, &siginfo, reinterpret_cast<void*>(context));
}
// static
void CrashpadClient::CrashWithoutDump(const std::string& message) {
LaunchAtCrashHandler::Disable();
LOG(FATAL) << message;
}
// static
void CrashpadClient::SetFirstChanceExceptionHandler(
FirstChanceHandler handler) {
......
......@@ -154,6 +154,10 @@ source_set("minidump_test") {
"minidump_writable_test.cc",
]
configs += [
"../build:crashpad_is_in_fuchsia",
]
deps = [
":test_support",
"../snapshot:test_support",
......
......@@ -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) {
StringFile string_file;
......@@ -139,6 +145,7 @@ TEST(MinidumpStringWriter, ConvertInvalidUTF8ToUTF16) {
EXPECT_NE(output_string.find(0xfffd), base::string16::npos);
}
}
#endif // !defined(CRASHPAD_IS_IN_FUCHSIA)
TEST(MinidumpStringWriter, MinidumpUTF8StringWriter) {
StringFile string_file;
......
......@@ -642,11 +642,9 @@ source_set("util_test") {
"win/session_end_watcher_test.cc",
]
if (crashpad_is_in_chromium) {
if (is_asan && is_component_build) {
# TODO(crbug.com/856174): Re-enable these once Windows ASan is fixed.
sources -= [ "stdlib/string_number_conversion_test.cc" ]
}
if (crashpad_is_in_chromium && is_asan && is_component_build) {
# TODO(crbug.com/856174): Re-enable these once Windows ASan is fixed.
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