diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-01-23 16:23:48 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-01-23 16:23:48 +0900 |
| commit | 324887d0d61ce2127dfd839930a88507c1641b75 (patch) | |
| tree | c99c4996aa42e4e5d4d75e1589be7318edb78816 /src | |
| parent | 28b7b9ec6441d96d63f309b93f7b486074b807e3 (diff) | |
| download | mruby-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.c | 13 |
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; |
