mruby master changes 42d2308 - 4b4ddd5
2015-02-23 11:25 govm commit 42d2308
realloc後の間違った参照を示しているポインタを修正しています。
src/vm.c: mrb_funcall_with_block()関数でstack_extend()関数がmrb->c->stbaseをreallocしたときに, argvがmrubyのstackを指している場合, stack_extend()関数後にargvは無効なアドレスを指しています。
以下のコードで不具合が発生します。
class A def initialize(a0,a1,a2,a3,a4) a0.is_a? Array end end def f(a0,a1,a2,a3,a4) A.new(a0,a1,a2,a3,a4) f(a0,a1,a2,a3,a4) end f(0,1,2,3,4)
セグメントフォルトになる不具合を以下の例外が発生するように修正しています。
stack level too deep. (limit=(0x40000 - 128)) (SystemStackError)
2015-02-24 00:16 kou commit 584d6de
if文で戻り値がないときに,真のときの値を返さない不具合を修正しています。
以下のコードで不具合が再現します:
x = if true 1 else case 2 when 3 end 4 end p x # => nil # 1 が期待されます。
2015-02-24 00:21 kou commit 4b4ddd5
case文で式がないときに有効な値を返さない不具合を修正しています。
以下のコードで不具合が再現します:
x = case when true; 1 end p x # => main # 1が期待されます。