Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash with none array methods variable or method. #368

Closed
ksss opened this issue May 29, 2022 · 1 comment
Closed

Crash with none array methods variable or method. #368

ksss opened this issue May 29, 2022 · 1 comment

Comments

@ksss
Copy link

ksss commented May 29, 2022

Description

When I run the following code, irb crashes and exits when I enter any key.

$ cat t.rb
#! /usr/bin/env ruby

class Foo
  def a(methods)
    binding.irb
  end
end

Foo.new.a(1)
$ ruby t.rb

From: t.rb @ line 5 :

    1: #! /usr/bin/env ruby
    2:
    3: class Foo
    4:   def a(methods)
 => 5:     binding.irb
    6:   end
    7: end
    8:
    9: Foo.new.a(1)
# Pressing any key...
irb(#<Foo:0x0000000100b0ec20>):001:0> a(eval):1:in `|': Array can't be coerced into Integer (TypeError)
	from (eval):1:in `a'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/completion.rb:362:in `eval'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/completion.rb:362:in `retrieve_completion_data'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/completion.rb:130:in `block in <module:InputCompletor>'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:1681:in `call_completion_proc_with_checking_args'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:543:in `call_completion_proc_with_checking_args'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:226:in `block in <class:Core>'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:588:in `instance_exec'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:588:in `call'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:623:in `call'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:667:in `render_each_dialog'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:651:in `block in render_dialog'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:650:in `each'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:650:in `render_dialog'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:510:in `rerender'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:330:in `block (3 levels) in inner_readline'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:328:in `each'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:328:in `block (2 levels) in inner_readline'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:403:in `block in read_io'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:373:in `loop'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:373:in `read_io'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:326:in `block in inner_readline'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:324:in `loop'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:324:in `inner_readline'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:254:in `readmultiline'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/3.1.0/forwardable.rb:238:in `readmultiline'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/3.1.0/forwardable.rb:238:in `readmultiline'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/input-method.rb:418:in `gets'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:539:in `block (2 levels) in eval_input'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:770:in `signal_status'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:538:in `block in eval_input'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/ruby-lex.rb:284:in `lex'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/ruby-lex.rb:253:in `block (2 levels) in each_top_level_statement'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/ruby-lex.rb:250:in `loop'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/ruby-lex.rb:250:in `block in each_top_level_statement'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/ruby-lex.rb:249:in `catch'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/ruby-lex.rb:249:in `each_top_level_statement'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:557:in `eval_input'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:491:in `block in run'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:490:in `catch'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:490:in `run'
	from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:976:in `irb'
	from <internal:prelude>:5:in `irb'
	from t.rb:5:in `a'
	from t.rb:9:in `<main>'

This is happening in the following eval code.

candidates = eval("methods | private_methods | local_variables | instance_variables | self.class.constants", bind).collect{|m| m.to_s}

Probably, it occurs when any one of methods private_methods local_variables instance_variables does not have a #| method.

I discovered this problem when I inserted binding.irb into the code below.
https://github.com/ruby/rbs/blob/4dc5b95c4971e7abdbbfd1304996275c8ae0f859/lib/rbs/definition_builder/method_builder.rb#L104

Result of irb_info

$ irb
irb(main):001:0> irb_info
=>
Ruby version: 3.1.1
IRB version: irb 1.4.1 (2021-12-25)
InputMethod: ReidlineInputMethod with Reline 0.3.1
RUBY_PLATFORM: arm64-darwin21
LANG env: ja_JP.UTF-8
East Asian Ambiguous Width: 1

Terminal Emulator

What's your terminal emulator?

iTerm2

Setting Files

Are you using ~/.irbrc and ~/.inputrc?

No.

osyo-manga added a commit to osyo-manga/irb that referenced this issue May 30, 2022
Ensure that methods are called even when local variables are defined.
see: ruby#368
osyo-manga added a commit to osyo-manga/irb that referenced this issue May 30, 2022
Ensure that methods are called even when local variables are defined.
see: ruby#368
osyo-manga added a commit to osyo-manga/irb that referenced this issue May 30, 2022
Ensure that methods are called even when local variables are defined.
see: ruby#368
st0012 pushed a commit to st0012/irb that referenced this issue Sep 30, 2022
Ensure that methods are called even when local variables are defined.
see: ruby#368
peterzhu2118 pushed a commit that referenced this issue Oct 2, 2022
Ensure that methods are called even when local variables are defined.
see: #368
matzbot pushed a commit to ruby/ruby that referenced this issue Oct 2, 2022
Ensure that methods are called even when local variables are defined.
see: ruby/irb#368

ruby/irb@c34d54b8bb
@ksss
Copy link
Author

ksss commented Oct 3, 2022

#369 was merged.
Thanks for response.

@ksss ksss closed this as completed Oct 3, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging a pull request may close this issue.

1 participant