aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-12-13 14:50:12 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-12-13 14:50:12 +0000
commitd61d9d5e8e5a6f7f56e54a2a35e82e209dad6e08 (patch)
tree030c6e016edc65f3e56f396093a5c1974f69cfcc
parentab6c8910f47a2b95f7338a182715ee0bee5ec45d (diff)
downloadruby-d61d9d5e8e5a6f7f56e54a2a35e82e209dad6e08.tar.gz
* error.c (name_err_mesg_to_str): clear rb_thread_t::errinfo when
ignore exception under rb_protect(). * test/ruby/test_exception.rb (test_exception_in_name_error_to_str): add a corresponding test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34028 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog8
-rw-r--r--error.c5
-rw-r--r--test/ruby/test_exception.rb17
3 files changed, 29 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 4d6dc47410..6cae1f1e0b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Tue Dec 13 23:43:48 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * error.c (name_err_mesg_to_str): clear rb_thread_t::errinfo when
+ ignore exception under rb_protect().
+
+ * test/ruby/test_exception.rb (test_exception_in_name_error_to_str):
+ add a corresponding test.
+
Tue Dec 13 16:13:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
* load.c (load_unlock): all threads requiring one file should
diff --git a/error.c b/error.c
index 3ea090fe83..71de97e9db 100644
--- a/error.c
+++ b/error.c
@@ -1012,6 +1012,7 @@ name_err_mesg_to_str(VALUE obj)
else {
const char *desc = 0;
VALUE d = 0, args[NAME_ERR_MESG_COUNT];
+ int state = 0;
obj = ptr[1];
switch (TYPE(obj)) {
@@ -1025,7 +1026,9 @@ name_err_mesg_to_str(VALUE obj)
desc = "false";
break;
default:
- d = rb_protect(rb_inspect, obj, 0);
+ d = rb_protect(rb_inspect, obj, &state);
+ if (state)
+ rb_set_errinfo(Qnil);
if (NIL_P(d) || RSTRING_LEN(d) > 65) {
d = rb_any_to_s(obj);
}
diff --git a/test/ruby/test_exception.rb b/test/ruby/test_exception.rb
index b437405612..028391d1e6 100644
--- a/test/ruby/test_exception.rb
+++ b/test/ruby/test_exception.rb
@@ -1,4 +1,5 @@
require 'test/unit'
+require 'tempfile'
require_relative 'envutil'
class TestException < Test::Unit::TestCase
@@ -363,4 +364,20 @@ end.join
assert_equal(false, efs.success?, bug5728)
assert_equal("msg", efs.message, bug5728)
end
+
+ def test_exception_in_name_error_to_str
+ bug5575 = '[ruby-core:41612]'
+ t = Tempfile.new(["test_exception_in_name_error_to_str", ".rb"])
+ t.puts <<-EOC
+ begin
+ BasicObject.new.inspect
+ rescue
+ $!.inspect
+ end
+ EOC
+ t.close
+ assert_nothing_raised(NameError, bug5575) do
+ load(t.path)
+ end
+ end
end