diff --git a/lib/irb/ruby-lex.rb b/lib/irb/ruby-lex.rb index 9f6196e5d..87b7ec5b5 100644 --- a/lib/irb/ruby-lex.rb +++ b/lib/irb/ruby-lex.rb @@ -107,6 +107,7 @@ def should_continue?(tokens, line, line_num) t.type != :NEWLINE && t.type != :EOF trailing = line.byteslice(t.location.end_column..) + trailing ||= '' # in case end_line is wrong (e.g. `"\C-`) break end end diff --git a/test/irb/test_irb.rb b/test/irb/test_irb.rb index 14ca74eac..4d92fa088 100644 --- a/test/irb/test_irb.rb +++ b/test/irb/test_irb.rb @@ -828,6 +828,12 @@ def test_dynamic_prompt_with_blank_line assert_dynamic_prompt(input_with_prompt) end + def test_dynamic_prompt_with_incomplete_ctrl_meta_sequence_string + assert_dynamic_prompt([['001:0:":* ', %q("\C-)]]) + assert_dynamic_prompt([['001:0:":* ', %q("\M-)]]) + assert_dynamic_prompt([['001:0:":* ', %q("\C-\M-)]]) + end + def assert_dynamic_prompt(input_with_prompt) expected_prompt_list, lines = input_with_prompt.transpose def @irb.generate_prompt(opens, continue, line_offset)