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
517e9313bf
Move #__id__ to BasicObject; ref #3417
2017-02-15 13:19:21 +09:00
Yukihiro "Matz" Matsumoto
612d636b77
Move #instance_eval to BasicObject; ref #3417
2017-02-15 13:15:58 +09:00
Yukihiro "Matz" Matsumoto
3dbda91788
Move #__send__ to BasicObject; ref #3417
2017-02-15 13:12:05 +09:00
Yukihiro "Matz" Matsumoto
8b4bd3158b
Move #== and #!= to BasicObject; ref #3417
2017-02-15 13:07:53 +09:00
Yukihiro "Matz" Matsumoto
3f9450e7b0
Move BasicObject#method_missing to Kernel#method_missing; ref #3417
...
More compatibility to CRuby.
Updated tests that assume old mruby behavior.
2017-02-15 12:56:27 +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
1e57fefbcf
Do not funcall() Exception#set_backtrace from runtime.
...
This change reduce flexibility but makes mruby simpler and faster.
2017-02-15 12:01:52 +09:00
Yukihiro "Matz" Matsumoto
8efa7b00df
Preallocate SystemStackError; ref #3421
2017-02-15 11:59:47 +09:00
Yukihiro "Matz" Matsumoto
dd24f9f5cc
Avoid calling hook methods if they are not overridden.
2017-02-15 09:25:09 +09:00
Yukihiro "Matz" Matsumoto
04296925ac
Use mrb_funcall_argv() instead of mrb_funcall()
2017-02-15 09:24:35 +09:00
Yukihiro "Matz" Matsumoto
30aa521854
Do not use mrb_funcall() if Hash#default is not overridden; ref #3421
...
This change reduces the recursion level, but does not solve the stack
overflow issue entirely.
2017-02-14 00:22:12 +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
60664823ba
Merge pull request #3451 from dabroz/revert-string-mul
...
Revert "Optimization for String#* for 1-byte strings"
2017-02-11 22:49:20 +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
Tomasz Dabrowski
90f262f642
Revert "Optimization for String#* for 1-byte strings"
...
This reverts commit d1bc7caeca .
2017-02-11 13:02:48 +01: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
8f4a929e1a
String#replace should update s->flags for MRB_STR_NO_UTF.
...
Otherwise String#size may return wrong length; fix #3448
2017-02-11 16:27:07 +09:00
Yukihiro "Matz" Matsumoto
6cb7aef563
Add type cast to pacify warning
2017-02-11 16:00:26 +09:00
Tomasz Dabrowski
d1bc7caeca
Optimization for String#* for 1-byte strings
2017-02-10 15:31:33 +01:00
Yukihiro "Matz" Matsumoto
4b32e651a5
Check if irep is NULL before print_backtrace()
...
According to the valgrind log attached to #3438 , proc->body.irep
may be NULL in some cases.
2017-02-08 23:10:25 +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
b277c58e78
Mark classes referenced from saved backtrace.
...
Maybe related to #3438
2017-02-08 16:31:37 +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
be550f04e4
codedump.c: OP_POPERR does not have register access.
2017-02-08 09:45:55 +09:00
Edgar Boda-Majer
46e4e342f4
Fix interpolation escaping in String.inspect
2017-02-07 13:33:53 +01:00
ksss
bd72dba8c0
Kernel#local_variables: Make result array unique
2017-02-06 11:16:47 +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
bf4e79cc62
argv may be modified when mrb_funcall() is called; fix #3419
...
Calling `mrb_funcall()` and `mrb_yield()` (and their related
functions) are discouraged unless absolutely necessary, because
it can cause this kind of issues very easily.
2017-02-04 14:10:39 +09:00
Yukihiro "Matz" Matsumoto
8f52b88ee7
No need to make env unshared in the finalization; fix #3425
2017-02-04 13:48:23 +09:00
Yukihiro "Matz" Matsumoto
8e0f231330
Mark mrb->backtrace.exc as GC root; fix #3388
2017-02-04 12:59:08 +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
b3ce364537
Outer class may be same as the class; fix #3382
2017-01-24 17:54:05 +09:00
Yukihiro "Matz" Matsumoto
72bff2932b
Use size_t to avoid integer overflow in mrb_ary_splice(); fix #3413
2017-01-24 11:36:27 +09:00
Yukihiro "Matz" Matsumoto
28cf7a549d
Change return type of mrb_range_beg_len() from int to mrb_int.
...
ref #3411
2017-01-23 22:18:29 +09:00
Yukihiro "Matz" Matsumoto
f0f095bc13
Fix a double free problem in codegen.c; fix #3378
...
This issue was first reported by https://hackerone.com/geeknik
The fix was proposed by @titanous
2017-01-23 16:53:31 +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
324887d0d6
Backtrace list must be an array of strings; fix #3408
2017-01-23 16:23:48 +09:00
Yukihiro "Matz" Matsumoto
28b7b9ec64
Skip non string values in backtraces; ref #3408
2017-01-23 16:22:55 +09:00
ksss
78a395d446
Refactoring: Use array_copy instead of for loop
2017-01-23 15:18:48 +09:00
Yukihiro "Matz" Matsumoto
4d38cad31b
Add MRB_API to mrb_range_beg_len(); ref #3411
2017-01-23 15:05:12 +09:00
Yukihiro "Matz" Matsumoto
5e1d923381
Changed the behavior of mrb_range_beg_len(); close #3411
...
The new API is:
int mrb_range_beg_len(mrb, range, &beg, &len, len, trunc)
The new argument `trunc` is a boolean value that specifies
whether the function truncates the range. The new return value
is an integer instead of a boolean, that is:
0: not a range
1: range with proper edges
2: out of range
To get the old behavior, you have to rewrite:
mrb_range_beg_len(mrb, range, &beg, &len, len)
to:
mrn_range_beg_len(mrb, range, &beg, &len, len, TRUE) == 1
[Breaking Change]
2017-01-23 14:35:26 +09:00