From 5d9b7bcd2129b0693533a2a729faa32b202cf464 Mon Sep 17 00:00:00 2001 From: Seiei Higa Date: Wed, 7 Jan 2015 03:05:27 +0900 Subject: [PATCH] vm_method.c: no klass, no method entry --- test/ruby/test_refinement.rb | 13 +++++++++++++ vm_method.c | 2 ++ 2 files changed, 15 insertions(+) diff --git a/test/ruby/test_refinement.rb b/test/ruby/test_refinement.rb index 11077b6..ec6609d 100644 --- a/test/ruby/test_refinement.rb +++ b/test/ruby/test_refinement.rb @@ -1163,6 +1163,19 @@ class TestRefinement < Test::Unit::TestCase assert_raise(NoMethodError, bug10106) {Object.new.foo} end; + + assert_separately([], <<-"end;") + bug10707 = '[ruby-core:67389] [Bug #10707]' + module RefinementBug + refine BasicObject do + def foo + end + end + end + + assert(methods, bug10707) + assert_raise(NameError, bug10707) {method(:foo)} + end; end private diff --git a/vm_method.c b/vm_method.c index 8af2198..7a74a67 100644 --- a/vm_method.c +++ b/vm_method.c @@ -645,6 +645,8 @@ verify_method_cache(VALUE klass, ID id, VALUE defined_class, rb_method_entry_t * rb_method_entry_t * rb_method_entry(VALUE klass, ID id, VALUE *defined_class_ptr) { + if (!klass) return 0; + #if OPT_GLOBAL_METHOD_CACHE struct cache_entry *ent; ent = GLOBAL_METHOD_CACHE(klass, id); -- 1.9.3 (Apple Git-50)