ruby-changes:45812
From: naruse <ko1@a...>
Date: Sun, 12 Mar 2017 04:18:49 +0900 (JST)
Subject: [ruby-changes:45812] naruse:r57885 (ruby_2_4): merge revision(s) 57510, 57511: [Backport #13176]
naruse 2017-03-12 04:18:45 +0900 (Sun, 12 Mar 2017) New Revision: 57885 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=57885 Log: merge revision(s) 57510,57511: [Backport #13176] eval.c: hide internal objects * eval.c (rb_ensure): veil internal exception objects not to leak in ensure functions. [ruby-core:79371] [Bug #13176] ensured.c: fix conflict * ext/-test-/exception/ensured.c (exc_raise): get rid of conflict with raise(2) in the standard. [ruby-core:79371] [Bug #13176] Added files: branches/ruby_2_4/test/-ext-/exception/test_exception_at_throwing.rb Modified directories: branches/ruby_2_4/ Modified files: branches/ruby_2_4/eval.c branches/ruby_2_4/ext/-test-/exception/ensured.c branches/ruby_2_4/version.h Index: ruby_2_4/eval.c =================================================================== --- ruby_2_4/eval.c (revision 57884) +++ ruby_2_4/eval.c (revision 57885) @@ -913,7 +913,7 @@ rb_ensure(VALUE (*b_proc)(ANYARGS), VALU https://github.com/ruby/ruby/blob/trunk/ruby_2_4/eval.c#L913 { int state; volatile VALUE result = Qnil; - volatile VALUE errinfo; + VALUE errinfo; rb_thread_t *const th = GET_THREAD(); rb_ensure_list_t ensure_list; ensure_list.entry.marker = 0; @@ -927,6 +927,9 @@ rb_ensure(VALUE (*b_proc)(ANYARGS), VALU https://github.com/ruby/ruby/blob/trunk/ruby_2_4/eval.c#L927 } TH_POP_TAG(); errinfo = th->errinfo; + if (!NIL_P(errinfo) && !RB_TYPE_P(errinfo, T_OBJECT)) { + th->errinfo = Qnil; + } th->ensure_list=ensure_list.next; (*ensure_list.entry.e_proc)(ensure_list.entry.data2); th->errinfo = errinfo; Index: ruby_2_4/test/-ext-/exception/test_exception_at_throwing.rb =================================================================== --- ruby_2_4/test/-ext-/exception/test_exception_at_throwing.rb (revision 0) +++ ruby_2_4/test/-ext-/exception/test_exception_at_throwing.rb (revision 57885) @@ -0,0 +1,18 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_4/test/-ext-/exception/test_exception_at_throwing.rb#L1 +# frozen_string_literal: true +require 'test/unit' + +module Bug + class TestException < Test::Unit::TestCase + def test_exception_at_throwing + assert_separately(%w[-r-test-/exception], "#{<<-"begin;"}\n#{<<-"end;"}") + begin; + e = RuntimeError.new("[Bug #13176]") + assert_raise_with_message(e.class, e.message) do + catch do |t| + Bug::Exception.ensure_raise(nil, e) {throw t} + end + end + end; + end + end +end Property changes on: ruby_2_4/test/-ext-/exception/test_exception_at_throwing.rb ___________________________________________________________________ Added: svn:eol-style + LF Index: ruby_2_4/ext/-test-/exception/ensured.c =================================================================== --- ruby_2_4/ext/-test-/exception/ensured.c (revision 57884) +++ ruby_2_4/ext/-test-/exception/ensured.c (revision 57885) @@ -18,8 +18,22 @@ ensured(VALUE module, VALUE object) https://github.com/ruby/ruby/blob/trunk/ruby_2_4/ext/-test-/exception/ensured.c#L18 return rb_ensure(begin, object, ensure, object); } +static VALUE +exc_raise(VALUE exc) +{ + rb_exc_raise(exc); + return Qnil; +} + +static VALUE +ensure_raise(VALUE module, VALUE object, VALUE exc) +{ + return rb_ensure(rb_yield, object, exc_raise, exc); +} + void Init_ensured(VALUE klass) { rb_define_module_function(klass, "ensured", ensured, 1); + rb_define_module_function(klass, "ensure_raise", ensure_raise, 2); } Index: ruby_2_4/version.h =================================================================== --- ruby_2_4/version.h (revision 57884) +++ ruby_2_4/version.h (revision 57885) @@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_4/version.h#L1 #define RUBY_VERSION "2.4.0" #define RUBY_RELEASE_DATE "2017-03-12" -#define RUBY_PATCHLEVEL 49 +#define RUBY_PATCHLEVEL 50 #define RUBY_RELEASE_YEAR 2017 #define RUBY_RELEASE_MONTH 3 Property changes on: ruby_2_4 ___________________________________________________________________ Modified: svn:mergeinfo Merged /trunk:r57510-57511 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/