summaryrefslogtreecommitdiffstats
path: root/lib/utils/database.c
diff options
context:
space:
mode:
authorNikola Pajkovsky <npajkovs@redhat.com>2010-09-10 11:07:33 +0200
committerNikola Pajkovsky <npajkovs@redhat.com>2010-09-10 11:39:27 +0200
commitc7129a09a31048dcca6b5913ac22c77ca3dc16ac (patch)
tree654b8480506d6e24c5fd82cfaee7ee2133cdf1cc /lib/utils/database.c
parenta73e1e09227d2d51fe48172ef2d25719fcf4b697 (diff)
downloadabrt-c7129a09a31048dcca6b5913ac22c77ca3dc16ac.tar.gz
abrt-c7129a09a31048dcca6b5913ac22c77ca3dc16ac.tar.xz
abrt-c7129a09a31048dcca6b5913ac22c77ca3dc16ac.zip
fix sigsegv
copy struct with char* lead to sigsegv. each char* needs to be duplicate. Signed-off-by: Nikola Pajkovsky <npajkovs@redhat.com>
Diffstat (limited to 'lib/utils/database.c')
-rw-r--r--lib/utils/database.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/utils/database.c b/lib/utils/database.c
index f572a5ba..2b742ebf 100644
--- a/lib/utils/database.c
+++ b/lib/utils/database.c
@@ -20,6 +20,27 @@
#include "abrtlib.h"
#include "database.h"
+struct db_row *db_rowcpy_from_list(GList* list)
+{
+ GList *first = g_list_first(list);
+ struct db_row *row = (struct db_row*)xzalloc(sizeof(struct db_row));
+ struct db_row *src_row = (struct db_row*)first->data;
+ /* All fields are initialized below, copying is not needed
+ * memcpy(row, (struct db_row*)first->data, sizeof(struct db_row));
+ */
+
+ row->db_uuid = xstrdup(src_row->db_uuid);
+ row->db_uid = xstrdup(src_row->db_uid);
+ row->db_inform_all = xstrdup(src_row->db_inform_all);
+ row->db_dump_dir = xstrdup(src_row->db_dump_dir);
+ row->db_count = xstrdup(src_row->db_count);
+ row->db_reported = xstrdup(src_row->db_reported);
+ row->db_message = xstrdup(src_row->db_message);
+ row->db_time = xstrdup(src_row->db_time);
+
+ return row;
+}
+
void db_row_free(struct db_row *row)
{
if (!row)