summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-01-23 16:23:48 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-01-23 16:23:48 +0900
commit324887d0d61ce2127dfd839930a88507c1641b75 (patch)
treec99c4996aa42e4e5d4d75e1589be7318edb78816 /src
parent28b7b9ec6441d96d63f309b93f7b486074b807e3 (diff)
downloadmruby-324887d0d61ce2127dfd839930a88507c1641b75.tar.gz
mruby-324887d0d61ce2127dfd839930a88507c1641b75.zip
Backtrace list must be an array of strings; fix #3408
Diffstat (limited to 'src')
-rw-r--r--src/error.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/error.c b/src/error.c
index 8e456ff1a..a71ee548f 100644
--- a/src/error.c
+++ b/src/error.c
@@ -208,6 +208,19 @@ exc_set_backtrace(mrb_state *mrb, mrb_value exc)
mrb_value backtrace;
mrb_get_args(mrb, "o", &backtrace);
+ if (!mrb_array_p(backtrace)) {
+ type_err:
+ mrb_raise(mrb, E_TYPE_ERROR, "backtrace must be Array of String");
+ }
+ else {
+ const mrb_value *p = RARRAY_PTR(backtrace);
+ const mrb_value *pend = p + RARRAY_LEN(backtrace);
+
+ while (p < pend) {
+ if (!mrb_string_p(*p)) goto type_err;
+ p++;
+ }
+ }
mrb_iv_set(mrb, exc, mrb_intern_lit(mrb, "backtrace"), backtrace);
return backtrace;