diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-12-06 14:30:12 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-12-06 17:28:20 +0900 |
| commit | ae44e80668657a93dc316b9c7d3524ed311fb3dc (patch) | |
| tree | fbc28884f8f65691f0d77f41de565694b37f0276 /src | |
| parent | b00d45b095e8586d07b0db51dde2794ab77b21ec (diff) | |
| download | mruby-ae44e80668657a93dc316b9c7d3524ed311fb3dc.tar.gz mruby-ae44e80668657a93dc316b9c7d3524ed311fb3dc.zip | |
Limit `ecall()` depth to 32 (default).
Diffstat (limited to 'src')
| -rw-r--r-- | src/vm.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -53,6 +53,11 @@ void abort(void); #define MRB_FUNCALL_DEPTH_MAX 512 #endif +/* Maximum depth of ecall() recursion. */ +#ifndef MRB_ECALL_DEPTH_MAX +#define MRB_ECALL_DEPTH_MAX 32 +#endif + /* Maximum stack depth. Should be set lower on memory constrained systems. The value below allows about 60000 recursive calls in the simplest case. */ #ifndef MRB_STACK_MAX @@ -319,7 +324,7 @@ ecall(mrb_state *mrb) int nregs; if (i<0) return; - if (ci - c->cibase > MRB_FUNCALL_DEPTH_MAX) { + if (ci - c->cibase > MRB_ECALL_DEPTH_MAX) { mrb_exc_raise(mrb, mrb_obj_value(mrb->stack_err)); } p = c->ensure[i]; |
