mruby master changes

mruby masterの変更履歴

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が期待されます。