| Index: components/crash/content/app/breakpad_linux.cc
|
| diff --git a/components/crash/content/app/breakpad_linux.cc b/components/crash/content/app/breakpad_linux.cc
|
| index 3c31d7619e49bf56210ff310e3a73905c58a43ec..2bf06867b0f28b91d01ae4cf33ddd18b42032344 100644
|
| --- a/components/crash/content/app/breakpad_linux.cc
|
| +++ b/components/crash/content/app/breakpad_linux.cc
|
| @@ -30,6 +30,7 @@
|
| #include "base/debug/crash_logging.h"
|
| #include "base/debug/dump_without_crashing.h"
|
| #include "base/files/file_path.h"
|
| +#include "base/format_macros.h"
|
| #include "base/lazy_instance.h"
|
| #include "base/linux_util.h"
|
| #include "base/macros.h"
|
| @@ -39,6 +40,7 @@
|
| #include "base/process/memory.h"
|
| #include "base/strings/string_split.h"
|
| #include "base/strings/string_util.h"
|
| +#include "base/strings/stringprintf.h"
|
| #include "base/threading/thread_checker.h"
|
| #include "breakpad/src/client/linux/crash_generation/crash_generation_client.h"
|
| #include "breakpad/src/client/linux/handler/exception_handler.h"
|
| @@ -1098,9 +1100,42 @@ void EnableNonBrowserCrashDumping() {
|
| }
|
| #endif // defined(OS_ANDROID)
|
|
|
| +bool g_use_crash_keys_whitelist;
|
| +std::vector<const char*> g_crash_keys_whitelist;
|
| +
|
| +void SetupCrashKeysWhiteList(bool use_white_list,
|
| + const std::vector<const char*>& keys) {
|
| + g_use_crash_keys_whitelist = use_white_list;
|
| + g_crash_keys_whitelist = keys;
|
| + LOG(ERROR) << "in SetupCrashKeysWhiteList, whitelist length: " << keys.size();
|
| + for (size_t i = 0; i < keys.size(); ++i) {
|
| + LOG(ERROR) << "in SetupCrashKeysWhiteList, entry: "
|
| + << g_crash_keys_whitelist.data()[i];
|
| + }
|
| +}
|
| +
|
| +bool IsInWhiteList(const base::StringPiece& key) {
|
| + for (size_t i = 0; i < g_crash_keys_whitelist.size(); ++i) {
|
| + LOG(ERROR) << "in SetupCrashKeysWhiteList, entry: "
|
| + << g_crash_keys_whitelist.data()[i];
|
| + if (0 == my_strcmp(g_crash_keys_whitelist.data()[i], key.data())) {
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| +}
|
| +
|
| void SetCrashKeyValue(const base::StringPiece& key,
|
| const base::StringPiece& value) {
|
| - g_crash_keys->SetKeyValue(key.data(), value.data());
|
| + LOG(ERROR) << "in SetCrashKeyValue for key " << key.data();
|
| + if (!g_use_crash_keys_whitelist || IsInWhiteList(key)) {
|
| + LOG(ERROR) << "in SetCrashKeyValue for key " << key.data()
|
| + << " it is in the whitelist :D";
|
| + g_crash_keys->SetKeyValue(key.data(), value.data());
|
| + } else {
|
| + LOG(ERROR) << "in SetCrashKeyValue for key " << key.data()
|
| + << ", not in the whitelist";
|
| + }
|
| }
|
|
|
| void ClearCrashKey(const base::StringPiece& key) {
|
| @@ -1112,6 +1147,8 @@ void ClearCrashKey(const base::StringPiece& key) {
|
| void InitCrashKeys() {
|
| g_crash_keys = new CrashKeyStorage;
|
| GetCrashReporterClient()->RegisterCrashKeys();
|
| + SetupCrashKeysWhiteList(GetCrashReporterClient()->UseCrashKeysWhiteList(),
|
| + GetCrashReporterClient()->GetWhiteListedCrashKeys());
|
| base::debug::SetCrashKeyReportingFunctions(&SetCrashKeyValue, &ClearCrashKey);
|
| }
|
|
|
| @@ -1905,6 +1942,10 @@ void InitCrashReporter(const std::string& process_type) {
|
| InitCrashReporter(process_type, sanitization_info);
|
| }
|
|
|
| +void InitCrashKeysForTesting() {
|
| + InitCrashKeys();
|
| +}
|
| +
|
| void InitCrashReporter(const std::string& process_type,
|
| const SanitizationInfo& sanitization_info) {
|
| #else
|
|
|