summaryrefslogtreecommitdiffhomepage
path: root/src/backtrace.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-04-19 15:33:54 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-04-19 15:49:50 +0900
commit85808e50b039f8091020f36c8e6e5fcc36bb4115 (patch)
treed94b57f3e7b84e0080ed5ce8ea53e7d9cc595a3f /src/backtrace.c
parent049ec9056ee728587c0f43e2e923c83f621c40b4 (diff)
downloadmruby-85808e50b039f8091020f36c8e6e5fcc36bb4115.tar.gz
mruby-85808e50b039f8091020f36c8e6e5fcc36bb4115.zip
backtrace.c: should skip first (innermost) frame w/out position; #5394
Otherwise we suffer `(unknown):0:` errors.
Diffstat (limited to 'src/backtrace.c')
-rw-r--r--src/backtrace.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/backtrace.c b/src/backtrace.c
index 61d606869..d7a8a0cdb 100644
--- a/src/backtrace.c
+++ b/src/backtrace.c
@@ -33,6 +33,7 @@ static void
each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, each_backtrace_func func, void *data)
{
ptrdiff_t i;
+ int n = 0;
if (ciidx >= mrb->c->ciend - mrb->c->cibase)
ciidx = 10; /* ciidx is broken... */
@@ -61,6 +62,7 @@ each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, each_backtrace_func func, void *
idx = (uint32_t)(pc - irep->iseq);
loc.lineno = mrb_debug_get_line(mrb, irep, idx);
+ if (n++ == 0 && loc.lineno == -1) continue;
loc.filename = mrb_debug_get_filename(mrb, irep, idx);
if (!loc.filename) {