[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]