summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--addr2line.c5
2 files changed, 9 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 574d42411a..a261f85c5e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu Apr 10 15:01:06 2014 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c (append_obj): clear allocated memory.
+
+ * addr2line.c (rb_dump_backtrace_with_lines): free `base_addrs'.
+
Thu Apr 10 14:40:18 2014 Koichi Sasada <ko1@atdot.net>
* gc.c (rb_gc_writebarrier_unprotect_promoted): disable to dump debug
diff --git a/addr2line.c b/addr2line.c
index 941d52db51..c936b52a26 100644
--- a/addr2line.c
+++ b/addr2line.c
@@ -423,7 +423,7 @@ fill_lines(int num_traces, void **traces, int check_debuglink,
static void
append_obj(obj_info_t **objp) {
- obj_info_t *newobj = malloc(sizeof(obj_info_t));
+ obj_info_t *newobj = calloc(1, sizeof(obj_info_t));
if (*objp) (*objp)->next = newobj;
*objp = newobj;
}
@@ -668,7 +668,7 @@ rb_dump_backtrace_with_lines(int num_traces, void **traces)
o = obj;
obj->path = main_path;
fill_lines(num_traces, traces, 1, &obj, lines, -1);
- for (i=0; o=o->next; i++) {
+ for (i=0; o=o->next; i++) { /* 1 or 2 times */
base_addrs[i] = (void *)o->base_addr;
}
}
@@ -741,6 +741,7 @@ next_line:
free(o);
}
free(lines);
+ free(base_addrs);
}
/* From FreeBSD's lib/libstand/printf.c */