summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorVladimir Timofeev <vovkasm@gmail.com>2016-03-25 08:41:25 -0400
committerJarkko Hietaniemi <jhi@iki.fi>2016-03-27 11:40:28 -0400
commit70ead873d4b864ca127d4f75aa654724264ff91b (patch)
treeeb5cedc39abb067b4ccdef8671ddcc54fb3afe0f /util.c
parent5942644739c2d477d25e89b4a40ced7cfb0ee4e9 (diff)
downloadperl-70ead873d4b864ca127d4f75aa654724264ff91b.tar.gz
[perl #127773: Assertion failure in perl built with Dusecbacktrace]
Diffstat (limited to 'util.c')
-rw-r--r--util.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/util.c b/util.c
index c1c854f9c0..97220712a1 100644
--- a/util.c
+++ b/util.c
@@ -6252,14 +6252,14 @@ static void atos_symbolize(atos_context* ctx,
char out[1024];
UV cnt = fread(out, 1, sizeof(out), fp);
if (cnt < sizeof(out)) {
- const char* p = atos_parse(out + cnt, out,
+ const char* p = atos_parse(out + cnt - 1, out,
source_name_size,
source_line);
if (p) {
Newx(*source_name,
- *source_name_size + 1, char);
+ *source_name_size, char);
Copy(p, *source_name,
- *source_name_size + 1, char);
+ *source_name_size, char);
}
}
pclose(fp);
@@ -6384,14 +6384,15 @@ Perl_get_c_backtrace(pTHX_ int depth, int skip)
for (i = skip; i < try_depth; i++) {
Dl_info* dl_info = &dl_infos[i];
- total_bytes += sizeof(Perl_c_backtrace_frame);
-
- source_names[i] = NULL;
- source_name_sizes[i] = 0;
- source_lines[i] = 0;
-
/* Yes, zero from dladdr() is failure. */
if (dladdr(raw_frames[i], dl_info)) {
+ total_bytes += sizeof(Perl_c_backtrace_frame);
+
+ object_name_sizes[i] = 0;
+ source_names[i] = NULL;
+ source_name_sizes[i] = 0;
+ source_lines[i] = 0;
+
object_name_sizes[i] =
dl_info->dli_fname ? strlen(dl_info->dli_fname) : 0;
symbol_name_sizes[i] =