From 481ac50e3e9ad53e4f07dce04facfaef5a2cdcfd Mon Sep 17 00:00:00 2001 From: Martin Milata Date: Thu, 5 Mar 2015 14:08:15 +0100 Subject: [PATCH] Fix defects found by coverity Resolves: #1336390 Signed-off-by: Martin Milata Conflicts: lib/abrt.c --- lib/core_stacktrace.c | 8 ++++++++ lib/core_unwind.c | 6 ++++-- lib/java_frame.c | 3 +++ lib/koops_stacktrace.c | 3 +++ lib/python_frame.c | 26 ++++++++++++++------------ lib/rpm.c | 4 +++- lib/utils.c | 1 + python/py_gdb_stacktrace.c | 8 ++++++++ satyr.c | 3 +++ 9 files changed, 47 insertions(+), 15 deletions(-) diff --git a/lib/core_stacktrace.c b/lib/core_stacktrace.c index f7fd369..aeb97e4 100644 --- a/lib/core_stacktrace.c +++ b/lib/core_stacktrace.c @@ -192,7 +192,10 @@ sr_core_stacktrace_from_json(struct sr_json_value *root, if (crash_thread) { if (!JSON_CHECK_TYPE(crash_thread, SR_JSON_BOOLEAN, "crash_thread")) + { + sr_core_thread_free(thread); goto fail; + } if (crash_thread->u.boolean) result->crash_thread = thread; @@ -296,6 +299,7 @@ sr_core_stacktrace_create(const char *gdb_stacktrace_text, { warn("Unable to parse unstrip output."); + sr_gdb_stacktrace_free(gdb_stacktrace); return NULL; } @@ -332,6 +336,8 @@ sr_core_stacktrace_create(const char *gdb_stacktrace_text, core_frame->function_name = sr_strdup(gdb_frame->function_name); } + + core_thread->frames = sr_core_frame_append(core_thread->frames, core_frame); } core_stacktrace->threads = @@ -341,6 +347,8 @@ sr_core_stacktrace_create(const char *gdb_stacktrace_text, gdb_thread = gdb_thread->next; } + sr_unstrip_free(unstrip); + sr_gdb_stacktrace_free(gdb_stacktrace); return core_stacktrace; } diff --git a/lib/core_unwind.c b/lib/core_unwind.c index c30f9db..b8c0235 100644 --- a/lib/core_unwind.c +++ b/lib/core_unwind.c @@ -127,6 +127,7 @@ find_elf_core (Dwfl_Module *mod, void **userdata, const char *modname, { warn("Unable to open executable '%s': %s", executable_file, elf_errmsg(-1)); + close(fd); return -1; } @@ -399,9 +400,10 @@ struct sr_core_stacktrace * sr_core_stacktrace_from_gdb(const char *gdb_output, const char *core_file, const char *exe_file, char **error_msg) { + /* I'm not going to rewrite it now since the function is not being used. */ + assert(error_msg); /* Initialize error_msg to 'no error'. */ - if (error_msg) - *error_msg = NULL; + *error_msg = NULL; struct core_handle *ch = open_coredump(core_file, exe_file, error_msg); if (*error_msg) diff --git a/lib/java_frame.c b/lib/java_frame.c index ee97572..d03f86a 100644 --- a/lib/java_frame.c +++ b/lib/java_frame.c @@ -359,7 +359,10 @@ sr_java_frame_parse_exception(const char **input, if (exception->next == NULL) exception->next = parsed; else + { + assert(frame); frame->next = parsed; + } frame = parsed; } diff --git a/lib/koops_stacktrace.c b/lib/koops_stacktrace.c index 611c7d1..01baa79 100644 --- a/lib/koops_stacktrace.c +++ b/lib/koops_stacktrace.c @@ -506,7 +506,10 @@ taint_flags_to_json(struct sr_koops_stacktrace *stacktrace) } if (strbuf->len == 0) + { + sr_strbuf_free(strbuf); return sr_strdup("[]"); + } sr_strbuf_append_char(strbuf, ']'); char *result = sr_strbuf_free_nobuf(strbuf); diff --git a/lib/python_frame.c b/lib/python_frame.c index b0540fe..4b4be8a 100644 --- a/lib/python_frame.c +++ b/lib/python_frame.c @@ -220,11 +220,10 @@ sr_python_frame_parse(const char **input, /* Parse file name */ if (!sr_parse_char_cspan(&local_input, "\"", &frame->file_name)) { - sr_python_frame_free(frame); location->message = sr_asprintf("Unable to find the '\"' character " "identifying the beginning of file name."); - return NULL; + goto fail; } if (strlen(frame->file_name) > 0 && @@ -243,7 +242,7 @@ sr_python_frame_parse(const char **input, if (0 == sr_skip_string(&local_input, "\", line ")) { location->message = sr_asprintf("Line separator not found."); - return NULL; + goto fail; } location->column += strlen("\", line "); @@ -253,7 +252,7 @@ sr_python_frame_parse(const char **input, if (0 == length) { location->message = sr_asprintf("Line number not found."); - return NULL; + goto fail; } location->column += length; @@ -263,7 +262,7 @@ sr_python_frame_parse(const char **input, if (local_input[0] != '\n') { location->message = sr_asprintf("Function name separator not found."); - return NULL; + goto fail; } /* The last frame of SyntaxError stack trace does not have @@ -280,11 +279,10 @@ sr_python_frame_parse(const char **input, /* Parse function name */ if (!sr_parse_char_cspan(&local_input, "\n", &frame->function_name)) { - sr_python_frame_free(frame); location->message = sr_asprintf("Unable to find the newline character " "identifying the end of function name."); - return NULL; + goto fail; } location->column += strlen(frame->function_name); @@ -301,19 +299,23 @@ sr_python_frame_parse(const char **input, } } - sr_skip_char(&local_input, '\n'); - sr_location_add(location, 1, 0); + if (sr_skip_char(&local_input, '\n')) + sr_location_add(location, 1, 0); /* Parse source code line (optional). */ if (4 == sr_skip_string(&local_input, " ")) { - sr_parse_char_cspan(&local_input, "\n", &frame->line_contents); - sr_skip_char(&local_input, '\n'); - sr_location_add(location, 1, 0); + if (sr_parse_char_cspan(&local_input, "\n", &frame->line_contents) + && sr_skip_char(&local_input, '\n')) + sr_location_add(location, 1, 0); } *input = local_input; return frame; + +fail: + sr_python_frame_free(frame); + return NULL; } char * diff --git a/lib/rpm.c b/lib/rpm.c index f8f1fa6..920e145 100644 --- a/lib/rpm.c +++ b/lib/rpm.c @@ -199,7 +199,9 @@ sr_rpm_package_sort(struct sr_rpm_package *packages) array[loop]->next = NULL; } - return array[0]; + struct sr_rpm_package *result = array[0]; + free(array); + return result; } static struct sr_rpm_package * diff --git a/lib/utils.c b/lib/utils.c index fa3c0a0..bdafaa7 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -354,6 +354,7 @@ sr_string_to_file(const char *filename, filename, error); + close(fd); return false; } diff --git a/python/py_gdb_stacktrace.c b/python/py_gdb_stacktrace.c index c799e06..5ed3533 100644 --- a/python/py_gdb_stacktrace.c +++ b/python/py_gdb_stacktrace.c @@ -7,6 +7,7 @@ #include "strbuf.h" #include "gdb/stacktrace.h" #include "gdb/thread.h" +#include "gdb/frame.h" #include "gdb/sharedlib.h" #include "location.h" #include "normalize.h" @@ -408,13 +409,20 @@ sr_py_gdb_stacktrace_find_crash_frame(PyObject *self, PyObject *args) PyObject_New(struct sr_py_gdb_frame, &sr_py_gdb_frame_type); if (!result) + { + sr_gdb_frame_free(frame); return PyErr_NoMemory(); + } result->frame = frame; this->crashframe = result; if (stacktrace_rebuild_thread_python_list(this) < 0) + { + sr_gdb_frame_free(frame); + Py_DECREF(result); return NULL; + } return (PyObject *)result; } diff --git a/satyr.c b/satyr.c index 6e1ed28..44bf869 100644 --- a/satyr.c +++ b/satyr.c @@ -210,6 +210,9 @@ debug_normalize(int argc, char **argv) struct sr_strbuf *strbuf = sr_strbuf_new(); sr_gdb_thread_append_to_str(thread, strbuf, false); puts(strbuf->buf); + + free(text); + sr_strbuf_free(strbuf); } static void -- 1.8.3.1