summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-09-24 05:22:23 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-09-24 05:22:23 +0000
commit6f968cab1508cdf04250db661e5122e53364d135 (patch)
tree00c3e652be8d2f88d205cfc0c5d312f76ea9cac3
parent1d44d10b48bb812bf57fd657a2ac8960f9ba69c7 (diff)
load.c: fix rb_load_protect condition
* load.c (rb_load_protect): fix the condition to load the found file. fixup of r59155. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60007 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ext/-test-/load/protect/extconf.rb1
-rw-r--r--ext/-test-/load/protect/protect.c19
-rw-r--r--load.c2
-rw-r--r--test/-ext-/load/script.rb2
-rw-r--r--test/-ext-/load/test_protect.rb14
5 files changed, 37 insertions, 1 deletions
diff --git a/ext/-test-/load/protect/extconf.rb b/ext/-test-/load/protect/extconf.rb
new file mode 100644
index 0000000000..83c080de9c
--- /dev/null
+++ b/ext/-test-/load/protect/extconf.rb
@@ -0,0 +1 @@
+create_makefile('-test-/load/protect')
diff --git a/ext/-test-/load/protect/protect.c b/ext/-test-/load/protect/protect.c
new file mode 100644
index 0000000000..ccfbbb9ea0
--- /dev/null
+++ b/ext/-test-/load/protect/protect.c
@@ -0,0 +1,19 @@
+#include <ruby.h>
+
+static VALUE
+load_protect(int argc, VALUE *argv, VALUE self)
+{
+ int state;
+ VALUE path, wrap;
+ rb_scan_args(argc, argv, "11", &path, &wrap);
+ rb_load_protect(path, RTEST(wrap), &state);
+ if (state) rb_jump_tag(state);
+ return Qnil;
+}
+
+void
+Init_protect(void)
+{
+ VALUE mod = rb_define_module("Bug");
+ rb_define_singleton_method(mod, "load_protect", load_protect, -1);
+}
diff --git a/load.c b/load.c
index 1d3ff23d55..eec5e98947 100644
--- a/load.c
+++ b/load.c
@@ -677,7 +677,7 @@ rb_load_protect(VALUE fname, int wrap, int *pstate)
}
POP_TAG();
- if (state != TAG_NONE) state = rb_load_internal0(GET_THREAD(), path, wrap);
+ if (state == TAG_NONE) state = rb_load_internal0(GET_THREAD(), path, wrap);
if (state != TAG_NONE) *pstate = state;
}
diff --git a/test/-ext-/load/script.rb b/test/-ext-/load/script.rb
new file mode 100644
index 0000000000..4bc2480587
--- /dev/null
+++ b/test/-ext-/load/script.rb
@@ -0,0 +1,2 @@
+# frozen_string_literal: true
+raise "foo"
diff --git a/test/-ext-/load/test_protect.rb b/test/-ext-/load/test_protect.rb
new file mode 100644
index 0000000000..83b179b34c
--- /dev/null
+++ b/test/-ext-/load/test_protect.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+require 'test/unit'
+require '-test-/load/protect'
+
+class Test_Load_Protect < Test::Unit::TestCase
+ def test_load_protect
+ assert_raise(LoadError) {
+ Bug.load_protect(__dir__+"/nonexistent.rb")
+ }
+ assert_raise_with_message(RuntimeError, "foo") {
+ Bug.load_protect(__dir__+"/script.rb")
+ }
+ end
+end