Yukihiro "Matz" Matsumoto
93d802987e
Extend VM stack just in case; ref #3551
2017-04-01 21:21:57 +09:00
Yukihiro "Matz" Matsumoto
071164b799
Should not shrink VM stack; fix #3551
2017-04-01 18:54:37 +09:00
Yukihiro "Matz" Matsumoto
1e87dfdf48
The stack may be reallocated in the func call; fix #3560
2017-04-01 13:20:19 +09:00
Yukihiro "Matz" Matsumoto
195af525fb
Expand stack for method_missing; fix #3528
2017-04-01 12:42:11 +09:00
Yukihiro "Matz" Matsumoto
d01118d261
OP_RESCUE refactored; ref #3519
2017-03-19 18:40:58 +09:00
Yukihiro "Matz" Matsumoto
2cbbeba0e0
Check call depth when mrb_yield_class() is called; ref #3521
2017-03-19 00:28:52 +09:00
Yukihiro "Matz" Matsumoto
75c374cad3
Update stack only when callinfo is popped; fix #3521
2017-03-19 00:28:52 +09:00
Yukihiro "Matz" Matsumoto
00427d45f5
Fixed access of uninitialized C local variable; fix #3525
2017-03-18 17:34:29 +09:00
Yukihiro "Matz" Matsumoto
b64f08784c
Protect stack region before calling mrb_convert_type(); fix #3504
2017-03-16 21:40:22 +09:00
Yukihiro "Matz" Matsumoto
877f43bca5
OP_BLKPUSH is invalid outside of methods; fix #3501
2017-03-13 22:03:31 +09:00
Yukihiro "Matz" Matsumoto
92f5becabe
Update VM to support new OP_RESCUE behavior; ref #3487
2017-03-12 00:58:00 +09:00
Yukihiro "Matz" Matsumoto
26169f9e25
Enhance OP_RESCUE to take B operand fas matching exception; ref #3487
2017-03-12 00:50:38 +09:00
Yukihiro "Matz" Matsumoto
4ab70294ea
Revert 642ab8e; ref #3422
...
Also fix #3499 . The issue was solved by #3462 .
2017-03-11 16:03:04 +09:00
Yukihiro "Matz" Matsumoto
ff262f2133
Update ci->mid according to surrounding scope; fix #3490
2017-03-10 12:37:19 +09:00
Yukihiro "Matz" Matsumoto
2f299cf4dc
Simplify expression; ref #3490
2017-03-10 12:36:58 +09:00
Yukihiro "Matz" Matsumoto
8a15abdac2
Avoid trampoline code if mrb_f_send is called from funcall; fix #3383
2017-03-06 07:35:41 +09:00
Yukihiro "Matz" Matsumoto
4f43db862a
Unshare popped TT_ENV objects.
2017-03-04 22:45:44 +09:00
Yukihiro "Matz" Matsumoto
3b40a2f6b5
Limit ecall() recursion levels; fix #3466
2017-03-04 18:56:20 +09:00
Yukihiro "Matz" Matsumoto
ffdf7be723
Define jmpbuf_id outside of extern "C"; ref #3470
2017-03-02 20:42:06 +09:00
Yukihiro "Matz" Matsumoto
27ec2437fd
Fix possible stack overflow for method_missing; fix #3478
...
Instead of shifting mruby VM stack, we always use CALL_MAXARGS.
2017-03-02 17:55:15 +09:00
Yukihiro "Matz" Matsumoto
0bcf9e28fc
Reorganize C++ exceptions; ref #3470
...
There are 3 levels of C++ exception handling:
* default - no C++ exception (use setjmp/longjmp)
* enable_cxx_exception (use C++ exceptions with C ABI)
* enable_cxx_abi (use C++ ABI including exceptions)
2017-03-02 10:58:26 +09:00
Yukihiro "Matz" Matsumoto
eca35df4ff
ci may be moved during mrb_convert_type(); ref #3474
2017-03-01 12:06:18 +09:00
Yukihiro "Matz" Matsumoto
b563bcb7ff
Check if OP_RETURN cross C function boundary; fix #3462
2017-02-27 20:13:01 +09:00
Yukihiro "Matz" Matsumoto
50bbdbb11b
Fixed ecall() invoked too early; fix #3464
2017-02-27 18:40:35 +09:00
Yukihiro "Matz" Matsumoto
3fc9bf3d5f
Update local variable only after the value is checked.
2017-02-27 18:39:42 +09:00
Yukihiro "Matz" Matsumoto
d219e63a74
Clear block arg when method_missing takes *args.
2017-02-27 18:38:56 +09:00
Yukihiro "Matz" Matsumoto
9e93d5dbf0
Stack may be reallocated in mrb_run(); fix #3465
2017-02-27 16:17:57 +09:00
Yukihiro "Matz" Matsumoto
736be0e98b
Always keep block argument space in stack; fix #3469
2017-02-27 13:05:26 +09:00
Yukihiro "Matz" Matsumoto
1e5b5b14d7
Prohibit too deep mrb_funcall() recursion; ref #3421
...
`mrb_funcall()` recursion can cause stack overflow easily,
so recursion depth is now limited to MRB_FUNCALL_DEPTH_MAX,
which default value is 512.
2017-02-15 12:06:32 +09:00
Yukihiro "Matz" Matsumoto
8efa7b00df
Preallocate SystemStackError; ref #3421
2017-02-15 11:59:47 +09:00
Yukihiro "Matz" Matsumoto
719f700adf
Extend mruby stack when keep is bigger than room; fix #3421
...
But #3421 still cause stack overflow error due to infinite recursion.
To prevent overflow, we need to add different stack depth check.
2017-02-14 00:15:58 +09:00
Yukihiro "Matz" Matsumoto
c2ddcd4517
Should handle break from funcall(); fix #3434
...
This issue was reported by https://hackerone.com/d4nny
2017-02-13 18:45:20 +09:00
Yukihiro "Matz" Matsumoto
f198530444
Fixed too much value_copy() when block is not given; fix #3440
...
The issue was reported by https://hackerone.com/titanous
2017-02-13 18:18:09 +09:00
Yukihiro "Matz" Matsumoto
1f2d786e32
Avoid direct return from ecall(); fix #3441
...
There's incompatibility left for mruby.
When you return from `ensure` clause, mruby simply ignores the return
value. CRuby returns from the method squashing the exception raised.
```
def f
no_such_method() # NoMethodError
ensure
return 22
end
p f() # CRuby prints `22`
```
2017-02-11 21:58:47 +09:00
Yukihiro "Matz" Matsumoto
642ab8ecda
ecall() should preserve stack address referenced from ci[1].
...
OP_RETURN accesses ci[1]->stackent that might be broken; fix #3442
2017-02-11 18:13:39 +09:00
Yukihiro "Matz" Matsumoto
af4d74fc7d
Add MRB_TT_PROC check to OP_SUPER as well; fix #3432
2017-02-08 21:13:22 +09:00
Yukihiro "Matz" Matsumoto
76135e757f
Check if m->env is NULL before dereferencing it; fix #3436
2017-02-08 19:01:09 +09:00
Yukihiro "Matz" Matsumoto
f3d4ff16d3
Fixed a bug in ci address shifting; fix #3423
...
Dinko Galetic and Denis Kasak reported the issue and the fix.
(via https://hackerone.com/dgaletic ).
2017-02-08 16:22:48 +09:00
Yukihiro "Matz" Matsumoto
48e0bbbfee
Make eval to use trampoline technique; fix #3415
...
Now `eval()` can call Fiber.yield etc.
2017-02-04 16:19:31 +09:00
Yukihiro "Matz" Matsumoto
ac88f85a9e
Copy mrb_float values from pool when MRB_WORD_BOXING; ref #3396
2017-01-25 11:09:15 +09:00
Yukihiro "Matz" Matsumoto
ffb5e5ab08
The ensure clause should keep its ci after its execution; fix #3406
...
This issue was reported by https://hackerone.com/ston3
2017-01-23 16:44:11 +09:00
Yukihiro "Matz" Matsumoto
c48aef0b65
Stack position may be bigger than stack bottom; fix #3401
...
This issue was reported by https://hackerone.com/titanous
2017-01-21 18:01:12 +09:00
Yukihiro "Matz" Matsumoto
fe0e45505b
Initialize callinfo->acc; ref #3243
2017-01-18 17:53:08 +09:00
Yukihiro "Matz" Matsumoto
8d61f2120c
Add proper given argument number in the wrong-number-argument error.
2017-01-12 23:14:35 +09:00
Yukihiro "Matz" Matsumoto
a3571240e5
Add proper stack size calculation; fix #3398
...
This issue was reported by https://hackerone.com/ssarong
2017-01-12 23:08:58 +09:00
Yukihiro "Matz" Matsumoto
db1bd078be
Use temporary variable to avoid potential crash; fix #3387
...
This issue was original reported by https://hackerone.com/icanthack
https://hackerone.com/titanous suggested the solution.
`regs` may be reallocated in the function call.
2017-01-11 17:59:56 +09:00
Yukihiro "Matz" Matsumoto
06b2e6a76c
Check if ci->target_class is NULL before dereferencing
...
close #3389
This issue was reported by https://hackerone.com/ston3
2017-01-11 11:30:52 +09:00
Yukihiro "Matz" Matsumoto
f388b6d612
use size_t instead of int
2017-01-02 17:48:44 +09:00
Yukihiro "Matz" Matsumoto
270ea41b37
method_missing() may have CALL_MAXARGS-1 arguments; fix #3351
...
The issue was reported by https://hackerone.com/ston3
2016-12-30 22:09:32 +09:00
Yukihiro "Matz" Matsumoto
df35076602
Restore callinfo offset in mrb_yield_with_class()
2016-12-13 17:17:47 +09:00