diff --git a/ChangeLog b/ChangeLog index b35833af0e..658708f718 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Jan 28 05:53:34 2012 Nobuyoshi Nakada + + * lib/irb/completion.rb (IRB::InputCompletor::CompletionProc): + ignore non-string name modules. [ruby-core:42244][Bug #5938] + Fri Jan 27 16:31:45 2012 Nobuyoshi Nakada * gc.c (HEAP_ALIGN, HEAP_ALIGN_MASK): DRY, let compiler calculate diff --git a/lib/irb/completion.rb b/lib/irb/completion.rb index 54e6526957..7fd69a0a09 100644 --- a/lib/irb/completion.rb +++ b/lib/irb/completion.rb @@ -178,8 +178,12 @@ module IRB rescue Exception name = "" end - next if name != "IRB::Context" and - /^(IRB|SLex|RubyLex|RubyToken)/ =~ name + begin + next if name != "IRB::Context" and + /^(IRB|SLex|RubyLex|RubyToken)/ =~ name + rescue Exception + next + end candidates.concat m.instance_methods(false).collect{|x| x.to_s} } candidates.sort! diff --git a/test/irb/test_completion.rb b/test/irb/test_completion.rb new file mode 100644 index 0000000000..3c11eb003c --- /dev/null +++ b/test/irb/test_completion.rb @@ -0,0 +1,17 @@ +require 'test/unit' +require_relative '../ruby/envutil' + +module TestIRB + class TestCompletion < Test::Unit::TestCase + def test_nonstring_module_name + bug5938 = '[ruby-core:42244]' + cmds = %W[-rirb -rirb/completion -e IRB.setup(__FILE__) + -e IRB.conf[:MAIN_CONTEXT]=IRB::Irb.new.context + -e module\sFoo;def\sself.name;//;end;end + -e IRB::InputCompletor::CompletionProc.call("[1].first.") + -- -f --] + status = assert_in_out_err(cmds, "", //, [], bug5938) + assert(status.success?, bug5938) + end + end +end