From c355df4b6d90f747bbd527c09b199e0825480fb6 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 21 Jan 2010 13:00:52 +0100 Subject: restore saving of backtrace broken by client->server security fix Signed-off-by: Denys Vlasenko --- lib/Plugins/FileTransfer.cpp | 6 ------ lib/Plugins/TicketUploader.h | 1 - lib/Utils/CrashTypes.cpp | 47 +++++++++++++++++++++++++++++++++----------- 3 files changed, 35 insertions(+), 19 deletions(-) (limited to 'lib') diff --git a/lib/Plugins/FileTransfer.cpp b/lib/Plugins/FileTransfer.cpp index fff6f2d..e28fbbe 100644 --- a/lib/Plugins/FileTransfer.cpp +++ b/lib/Plugins/FileTransfer.cpp @@ -25,12 +25,6 @@ #include #include #include -//#include -//#include -//#include -//#include -//#include -//#include #include #include #include diff --git a/lib/Plugins/TicketUploader.h b/lib/Plugins/TicketUploader.h index fcc59f0..7a371a3 100644 --- a/lib/Plugins/TicketUploader.h +++ b/lib/Plugins/TicketUploader.h @@ -27,7 +27,6 @@ #include "Plugin.h" #include "Reporter.h" -//#include "CrashTypes.h" class CTicketUploader : public CReporter { diff --git a/lib/Utils/CrashTypes.cpp b/lib/Utils/CrashTypes.cpp index 552c366..4fc9333 100644 --- a/lib/Utils/CrashTypes.cpp +++ b/lib/Utils/CrashTypes.cpp @@ -62,9 +62,10 @@ void add_to_crash_data_ext(map_crash_data_t& pCrashData, { map_crash_data_t::iterator it = pCrashData.find(pItem); if (it == pCrashData.end()) { - pCrashData[pItem].push_back(pType); - pCrashData[pItem].push_back(pEditable); - pCrashData[pItem].push_back(pContent); + vector_string_t& v = pCrashData[pItem]; /* create empty vector */ + v.push_back(pType); + v.push_back(pEditable); + v.push_back(pContent); return; } vector_string_t& v = it->second; @@ -82,28 +83,50 @@ void add_to_crash_data(map_crash_data_t& pCrashData, add_to_crash_data_ext(pCrashData, pItem, CD_TXT, CD_ISNOTEDITABLE, pContent); } -const std::string& get_crash_data_item_content(const map_crash_data_t& crash_data, const char *key) +static const std::string* helper_get_crash_data_item_content(const map_crash_data_t& crash_data, const char *key) { map_crash_data_t::const_iterator it = crash_data.find(key); if (it == crash_data.end()) { - error_msg_and_die("Error accessing crash data: no ['%s']", key); + return NULL; } if (it->second.size() <= CD_CONTENT) { + return NULL; + } + return &it->second[CD_CONTENT]; +} + +const std::string& get_crash_data_item_content(const map_crash_data_t& crash_data, const char *key) +{ + const std::string* sp = helper_get_crash_data_item_content(crash_data, key); + if (sp == NULL) { + if (crash_data.find(key) == crash_data.end()) + error_msg_and_die("Error accessing crash data: no ['%s']", key); error_msg_and_die("Error accessing crash data: no ['%s'][%d]", key, CD_CONTENT); } - return it->second[CD_CONTENT]; + return *sp; +} + +const char *get_crash_data_item_content_or_NULL(const map_crash_data_t& crash_data, const char *key) +{ + const std::string* sp = helper_get_crash_data_item_content(crash_data, key); + if (!sp) { + return NULL; + } + return sp->c_str(); } void log_map_crash_data(const map_crash_data_t& data, const char *name) { - map_crash_data_t::const_iterator itc = data.begin(); - while (itc != data.end()) + map_crash_data_t::const_iterator it = data.begin(); + while (it != data.end()) { + ssize_t sz = it->second.size(); log("%s[%s]:%s/%s/'%.20s'", - name, itc->first.c_str(), - itc->second[0].c_str(), itc->second[1].c_str(), - itc->second[2].c_str() + name, it->first.c_str(), + sz > 0 ? it->second[0].c_str() : "", + sz > 1 ? it->second[1].c_str() : "", + sz > 2 ? it->second[2].c_str() : "" ); - itc++; + it++; } } -- cgit