From 545c9f5bedb350042659842ae4f44d4a0a5d87de Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 25 May 2016 13:45:25 +0900 Subject: [PATCH 1/2] Ignore invalid parameter error in Electron --- atom/app/atom_main_delegate.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/atom/app/atom_main_delegate.cc b/atom/app/atom_main_delegate.cc index ff7ba0894f..9ce8dc504a 100644 --- a/atom/app/atom_main_delegate.cc +++ b/atom/app/atom_main_delegate.cc @@ -30,6 +30,13 @@ bool IsBrowserProcess(base::CommandLine* cmd) { return process_type.empty(); } +#if defined(OS_WIN) +void InvalidParameterHandler(const wchar_t*, const wchar_t*, const wchar_t*, + unsigned int, uintptr_t) { + // noop. +} +#endif + } // namespace AtomMainDelegate::AtomMainDelegate() { @@ -87,6 +94,11 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_code) { SetUpBundleOverrides(); #endif +#if defined(OS_WIN) + // Ignore invalid parameter errors. + _set_invalid_parameter_handler(InvalidParameterHandler); +#endif + return brightray::MainDelegate::BasicStartupComplete(exit_code); } From 34c4e797bbba3bbeb718340c9ca40eca1536d10b Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 25 May 2016 14:40:14 +0900 Subject: [PATCH 2/2] Truncate the strings passed to google_breakpad::CustomInfoEntry --- .../crash_reporter/crash_reporter_win.cc | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/atom/common/crash_reporter/crash_reporter_win.cc b/atom/common/crash_reporter/crash_reporter_win.cc index 939a02f090..4264f6af9d 100644 --- a/atom/common/crash_reporter/crash_reporter_win.cc +++ b/atom/common/crash_reporter/crash_reporter_win.cc @@ -43,6 +43,10 @@ const MINIDUMP_TYPE kSmallDumpType = static_cast( const wchar_t kWaitEventFormat[] = L"$1CrashServiceWaitEvent"; const wchar_t kPipeNameFormat[] = L"\\\\.\\pipe\\$1 Crash Service"; +// Matches breakpad/src/client/windows/common/ipc_protocol.h. +const int kNameMaxLength = 64; +const int kValueMaxLength = 64; + typedef NTSTATUS (WINAPI* NtTerminateProcessPtr)(HANDLE ProcessHandle, NTSTATUS ExitStatus); char* g_real_terminate_process_stub = NULL; @@ -247,9 +251,18 @@ google_breakpad::CustomClientInfo* CrashReporterWin::GetCustomInfo( for (StringMap::const_iterator iter = upload_parameters_.begin(); iter != upload_parameters_.end(); ++iter) { - custom_info_entries_.push_back(google_breakpad::CustomInfoEntry( - base::UTF8ToWide(iter->first).c_str(), - base::UTF8ToWide(iter->second).c_str())); + // breakpad has hardcoded the length of name/value, and doesn't truncate + // the values itself, so we have to truncate them here otherwise weird + // things may happen. + std::wstring name = base::UTF8ToWide(iter->first); + std::wstring value = base::UTF8ToWide(iter->second); + if (name.length() > kNameMaxLength - 1) + name.resize(kNameMaxLength - 1); + if (value.length() > kValueMaxLength - 1) + value.resize(kValueMaxLength - 1); + + custom_info_entries_.push_back( + google_breakpad::CustomInfoEntry(name.c_str(), value.c_str())); } custom_info_.entries = &custom_info_entries_.front();