summaryrefslogtreecommitdiffstats
path: root/lib/Utils
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-12-16 15:09:55 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2009-12-16 15:09:55 +0100
commit707f64b85c8a1b88923617ff72bd8a4ca562f3bd (patch)
tree19543e9df7d87a2204e944a332158137805e9a92 /lib/Utils
parent1eae9a2bcc8583bf54ec7027ead9b0ae01861481 (diff)
downloadabrt-707f64b85c8a1b88923617ff72bd8a4ca562f3bd.tar.gz
abrt-707f64b85c8a1b88923617ff72bd8a4ca562f3bd.tar.xz
abrt-707f64b85c8a1b88923617ff72bd8a4ca562f3bd.zip
prevent destructors from throwing exceptions; check curl_easy_init errors
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'lib/Utils')
-rw-r--r--lib/Utils/DebugDump.cpp16
-rw-r--r--lib/Utils/DebugDump.h2
-rw-r--r--lib/Utils/abrt_xmlrpc.cpp10
-rw-r--r--lib/Utils/abrt_xmlrpc.h5
4 files changed, 31 insertions, 2 deletions
diff --git a/lib/Utils/DebugDump.cpp b/lib/Utils/DebugDump.cpp
index 765b5146..b4c3ee49 100644
--- a/lib/Utils/DebugDump.cpp
+++ b/lib/Utils/DebugDump.cpp
@@ -68,6 +68,22 @@ CDebugDump::CDebugDump() :
m_bLocked(false)
{}
+CDebugDump::~CDebugDump()
+{
+ /* Paranoia. In C++, destructor will abort() if it was called while unwinding
+ * the stack and it throws an exception.
+ */
+ try
+ {
+ Close();
+ m_sDebugDumpDir.clear();
+ }
+ catch (...)
+ {
+ error_msg_and_die("Internal error");
+ }
+}
+
void CDebugDump::Open(const char *pDir)
{
if (m_bOpened)
diff --git a/lib/Utils/DebugDump.h b/lib/Utils/DebugDump.h
index fad39ecb..c59552e9 100644
--- a/lib/Utils/DebugDump.h
+++ b/lib/Utils/DebugDump.h
@@ -59,7 +59,7 @@ class CDebugDump
public:
CDebugDump();
- ~CDebugDump() { Close(); }
+ ~CDebugDump();
void Open(const char *pDir);
void Create(const char *pDir, int64_t uid);
diff --git a/lib/Utils/abrt_xmlrpc.cpp b/lib/Utils/abrt_xmlrpc.cpp
index 7205316c..ae1d098e 100644
--- a/lib/Utils/abrt_xmlrpc.cpp
+++ b/lib/Utils/abrt_xmlrpc.cpp
@@ -5,6 +5,16 @@
#include "abrt_xmlrpc.h"
#include "ABRTException.h"
+CURL* xcurl_easy_init()
+{
+ CURL* curl = curl_easy_init();
+ if (!curl)
+ {
+ error_msg_and_die("Can't create curl handle");
+ }
+ return curl;
+}
+
void throw_if_xml_fault_occurred(xmlrpc_env *env)
{
if (env->fault_occurred)
diff --git a/lib/Utils/abrt_xmlrpc.h b/lib/Utils/abrt_xmlrpc.h
index e67ab19a..352e80ca 100644
--- a/lib/Utils/abrt_xmlrpc.h
+++ b/lib/Utils/abrt_xmlrpc.h
@@ -1,6 +1,7 @@
#ifndef ABRT_XMLRPC_H_
#define ABRT_XMLRPC_H_ 1
+#include <curl/curl.h>
#include <xmlrpc-c/base.h>
#include <xmlrpc-c/client.h>
@@ -15,13 +16,15 @@ struct abrt_xmlrpc_conn {
xmlrpc_server_info* m_pServer_info;
abrt_xmlrpc_conn(const char* url, bool no_ssl_verify) { new_xmlrpc_client(url, no_ssl_verify); }
+ /* this never throws exceptions - calls C functions only */
~abrt_xmlrpc_conn() { destroy_xmlrpc_client(); }
void new_xmlrpc_client(const char* url, bool no_ssl_verify);
void destroy_xmlrpc_client();
};
-/* Utility function */
+/* Utility functions */
void throw_if_xml_fault_occurred(xmlrpc_env *env);
+CURL* xcurl_easy_init();
#endif