Project

General

Profile

Bug #16510

irb crashes when hitting 'Home' or 'End' keys

Added by packerbacker89 (Josh Johnson) 4 months ago. Updated 4 months ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:96870]

Description

There were similar bugs opened in the past few months, but they all appear to be closed.

System: Ruby 2.7.0, reline 0.1.2, irb 1.2.1

Open irb and hit the 'Home' or 'End' key on the keyboard. This should go to the beginning / end of the line. Instead, the console crashes and the following traceback is provided:

    35: from /x/ruby-2.7.0/bin/irb:23:in `<main>'
    34: from /x/ruby-2.7.0/bin/irb:23:in `load'
    33: from /x/ruby-2.7.0/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>'
    32: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb.rb:398:in `start'
    31: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb.rb:469:in `run'
    30: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb.rb:469:in `catch'
    29: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb.rb:470:in `block in run'
    28: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb.rb:535:in `eval_input'
    27: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:134:in `each_top_level_statement'
    26: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:134:in `catch'
    25: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:135:in `block in each_top_level_statement'
    24: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:135:in `loop'
    23: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:138:in `block (2 levels) in each_top_level_statement'
    22: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:166:in `lex'
    21: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb.rb:516:in `block in eval_input'
    20: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb.rb:693:in `signal_status'
    19: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb.rb:517:in `block (2 levels) in eval_input'
    18: from /x/ruby-2.7.0/lib/ruby/2.7.0/irb/input-method.rb:258:in `gets'
    17: from /x/ruby-2.7.0/lib/ruby/2.7.0/forwardable.rb:235:in `readmultiline'
    16: from /x/ruby-2.7.0/lib/ruby/2.7.0/forwardable.rb:235:in `readmultiline'
    15: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline.rb:170:in `readmultiline'
    14: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline.rb:232:in `inner_readline'
    13: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline.rb:232:in `loop'
    12: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline.rb:233:in `block in inner_readline'
    11: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline.rb:262:in `read_io'
    10: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline.rb:262:in `loop'
     9: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline.rb:286:in `block in read_io'
     8: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline.rb:234:in `block (2 levels) in inner_readline'
     7: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline.rb:234:in `each'
     6: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline.rb:235:in `block (3 levels) in inner_readline'
     5: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline/line_editor.rb:829:in `input_key'
     4: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline/line_editor.rb:787:in `normal_char'
     3: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline/line_editor.rb:758:in `process_key'
     2: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline/line_editor.rb:1109:in `ed_insert'
     1: from /x/ruby-2.7.0/gems/reline-0.1.2/lib/reline/unicode.rb:70:in `get_mbchar_width'
/x/ruby-2.7.0/gems/reline-0.1.2/lib/reline/unicode.rb:70:in `encode': "\\xCF" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)

In addition, hitting the 'Insert', 'Page Up', and 'Page Down' keys result in odd characters shown in the console (such as "^[[2~"). This is only a minor issue compared to the console crash.

Updated by packerbacker89 (Josh Johnson) 4 months ago

Note: none of this behavior occurs in Ruby 2.6.5. This is related exclusively to 2.7.0.

Updated by aycabta (aycabta .) 4 months ago

What OS and virtual console software (Terminal.app, command prompt, xterm...) are you using?

Updated by packerbacker89 (Josh Johnson) 4 months ago

I've found the issue using RedHat 6.10 and reproduced the behavior in CentOS 6.

I was using GNOME Terminal (v 2.31.3) when I discovered the issue.
I checked, and it is working somewhat correctly in xterm and konsole. That is, it does not crash upon hitting 'Home' or 'End'. The odd characters still appear upon hitting 'Insert', 'Page Up', and 'Page Down'.

#4

Updated by nobu (Nobuyoshi Nakada) 4 months ago

  • Description updated (diff)

Updated by mame (Yusuke Endoh) 4 months ago

It works perfectly for me. I'm using GNOME Terminal (GNOME Terminal 3.34.2 using VTE 0.58.2 +BIDI +GNUTLS) in Ubuntu 19.10.

Updated by jaruga (Jun Aruga) 4 months ago

Hi, packerbacker89.
Here are the centos 6 containers, tag 6 and 6.X.
https://hub.docker.com/_/centos/

If you can reproduce the error on the containers, and you can provide the Dockerfile to reproduce it, it might be helpful.

Updated by aycabta (aycabta .) 4 months ago

packerbacker89 (Josh Johnson)
Could you show a full result of gnome-terminal --version?

jaruga (Jun Aruga)
I think the CUI access via Docker is sometimes not good. It's not perfect compatibility.

Updated by packerbacker89 (Josh Johnson) 4 months ago

aycabta (aycabta .)
Here is the gnome-terminal version: GNOME Terminal 2.31.3

jaruga (Jun Aruga)
I'll try to work on reproducing it via the container when I have some time.

#9

Updated by aycabta (aycabta .) 4 months ago

  • Status changed from Open to Closed

Applied in changeset git|5d124a3b68982e779946804b5b9578c403c6bdf2.


[ruby/reline] Support GNOME style Home/End key sequences [Bug #16510]

https://github.com/ruby/reline/commit/788f0df845

Updated by aycabta (aycabta .) 4 months ago

This bug was based on unsupported key sequences environment. This was a good chance to survey it for me. Thank you.

ref. http://blog.bachi.net/?p=2082

Also available in: Atom PDF