10000 Endless method definition can cause an exception with open brace · Issue #132 · ruby/irb · GitHub
[go: up one dir, main page]

Skip to content
Endless method definition can cause an exception with open brace #132
@wanabe

Description

@wanabe

Description

Here is an example script.

$ cat a.rb
def a()=[
1,
].
b
exit

irb works fine with the file path.

$ irb --multiline a.rb
a.rb(main):001:0> def a()=[
a.rb(main):002:2*       1,
a.rb(main):003:1*     ].
a.rb(main):004:0> b
=> :a
a.rb(main):005:0> exit

but irb can cause an exception with STDIN.

$ echo;cat a.rb|irb --multiline
def a()=[
1,
]./home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline/line_editor.rb:860:in `*': negative argument (ArgumentError)
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline/line_editor.rb:860:in `process_auto_indent'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline/line_editor.rb:840:in `input_key'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:241:in `block (3 levels) in inner_readline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:240:in `each'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:240:in `block (2 levels) in inner_readline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:311:in `block in read_io'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:270:in `loop'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:270:in `read_io'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:239:in `block in inner_readline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:238:in `loop'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:238:in `inner_readline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:175:in `readmultiline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/forwardable.rb:238:in `readmultiline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/forwardable.rb:238:in `readmultiline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/input-method.rb:294:in `gets'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:519:in `block (2 levels) in eval_input'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:704:in `signal_status'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:518:in `block in eval_input'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/ruby-lex.rb:182:in `lex'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/ruby-lex.rb:154:in `block (2 levels) in each_top_level_statement'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/ruby-lex.rb:151:in `loop'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/ruby-lex.rb:151:in `block in each_top_level_statement'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/ruby-lex.rb:150:in `catch'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/ruby-lex.rb:150:in `each_top_level_statement'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:537:in `eval_input'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:472:in `block in run'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:471:in `catch'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:471:in `run'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:400:in `start'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/gems/3.0.0/gems/irb-1.2.7/exe/irb:11:in `<top (required)>'
        from /home/wanabe/.rbenv/versions/master/bin/irb:23:in `load'
        from /home/wanabe/.rbenv/versions/master/bin/irb:23:in `<main>'

The same thing happened when I entered it manually.

$ irb
irb(main):001:2* def a()=[
irb(main):002:1* 1,
irb(main):003:0* ]./home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline/line_editor.rb:860:in `*': negative argument (ArgumentError)
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline/line_editor.rb:860:in `process_auto_indent'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline/line_editor.rb:840:in `input_key'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:241:in `block (3 levels) in inner_readline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:240:in `each'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:240:in `block (2 levels) in inner_readline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:311:in `block in read_io'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:270:in `loop'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:270:in `read_io'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:239:in `block in inner_readline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:238:in `loop'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:238:in `inner_readline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/reline.rb:175:in `readmultiline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/forwardable.rb:238:in `readmultiline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/forwardable.rb:238:in `readmultiline'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/input-method.rb:294:in `gets'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:519:in `block (2 levels) in eval_input'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:704:in `signal_status'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:518:in `block in eval_input'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/ruby-lex.rb:182:in `lex'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/ruby-lex.rb:154:in `block (2 levels) in each_top_level_statement'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/ruby-lex.rb:151:in `loop'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/ruby-lex.rb:151:in `block in each_top_level_statement'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/ruby-lex.rb:150:in `catch'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb/ruby-lex.rb:150:in `each_top_level_statement'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:537:in `eval_input'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:472:in `block in run'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:471:in `catch'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:471:in `run'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/3.0.0/irb.rb:400:in `start'
        from /home/wanabe/.rbenv/versions/master/lib/ruby/gems/3.0.0/gems/irb-1.2.7/exe/irb:11:in `<top (required)>'
        from /home/wanabe/.rbenv/versions/master/bin/irb:23:in `load'
        from /home/wanabe/.rbenv/versions/master/bin/irb:23:in `<main>'

Terminal Emulator

MATE Terminal 1.24.1

Setting Files

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

No.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0