summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-07-13 05:26:00 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-07-13 05:26:00 +0000
commitd8c3672b012ec6eb55e097162c6c638e8d932471 (patch)
tree570d361546288e014323e46cb92bd49192d3f4a8
parentbebb62e01b6d752756c8cb51794119c490cde77c (diff)
* iseq.c (Init_ISeq): undef ISeq.translate and ISeq.load_iseq
to prevent calling super classes' methods. Without this patch, you can write workaround like: class << RubyVM::InstructionSequence def translate; end undef translate end * test/ruby/test_iseq.rb: add a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55656 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog14
-rw-r--r--iseq.c3
-rw-r--r--test/ruby/test_iseq.rb10
3 files changed, 27 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 158df4f2314..0ce05213147 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+Wed Jul 13 14:22:50 2016 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c (Init_ISeq): undef ISeq.translate and ISeq.load_iseq
+ to prevent calling super classes' methods.
+
+ Without this patch, you can write workaround like:
+
+ class << RubyVM::InstructionSequence
+ def translate; end
+ undef translate
+ end
+
+ * test/ruby/test_iseq.rb: add a test.
+
Wed Jul 13 14:16:03 2016 Koichi Sasada <ko1@atdot.net>
* vm_method.c (method_entry_get_without_cache): check
diff --git a/iseq.c b/iseq.c
index 28d35eb3282..1c22fea74d6 100644
--- a/iseq.c
+++ b/iseq.c
@@ -2462,4 +2462,7 @@ Init_ISeq(void)
rb_define_singleton_method(rb_cISeq, "disasm", iseqw_s_disasm, 1);
rb_define_singleton_method(rb_cISeq, "disassemble", iseqw_s_disasm, 1);
rb_define_singleton_method(rb_cISeq, "of", iseqw_s_of, 1);
+
+ rb_undef_method(CLASS_OF(rb_cISeq), "translate");
+ rb_undef_method(CLASS_OF(rb_cISeq), "load_iseq");
}
diff --git a/test/ruby/test_iseq.rb b/test/ruby/test_iseq.rb
index a71ad565f70..dba714aa627 100644
--- a/test/ruby/test_iseq.rb
+++ b/test/ruby/test_iseq.rb
@@ -235,4 +235,14 @@ class TestISeq < Test::Unit::TestCase
end
assert_equal([m1, e1.message], [m2, e2.message], feature11951)
end
+
+ def test_translate_by_object
+ assert_separately([], <<-"end;")
+ class Object
+ def translate
+ end
+ end
+ assert_equal(0, eval("0"))
+ end;
+ end
end