[rubygems/rubygems] Boundary check in `Gem::StreamUI#choose_from_list`

https://github.com/rubygems/rubygems/commit/abacb0cb34
This commit is contained in:
Nobuyoshi Nakada 2023-07-19 23:23:37 +09:00 коммит произвёл git
Родитель 47c7c188e0
Коммит f602cb55d7
2 изменённых файлов: 31 добавлений и 0 удалений

Просмотреть файл

@ -237,6 +237,7 @@ class Gem::StreamUI
return nil, nil unless result return nil, nil unless result
result = result.strip.to_i - 1 result = result.strip.to_i - 1
return nil, nil unless (0...list.size) === result
[list[result], result] [list[result], result]
end end

Просмотреть файл

@ -114,6 +114,36 @@ class TestGemStreamUI < Gem::TestCase
assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
end end
def test_choose_from_list_0
@in.puts "0"
@in.rewind
result = @sui.choose_from_list "which one?", %w[foo bar]
assert_equal [nil, nil], result
assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
end
def test_choose_from_list_over
@in.puts "3"
@in.rewind
result = @sui.choose_from_list "which one?", %w[foo bar]
assert_equal [nil, nil], result
assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
end
def test_choose_from_list_negative
@in.puts "-1"
@in.rewind
result = @sui.choose_from_list "which one?", %w[foo bar]
assert_equal [nil, nil], result
assert_equal "which one?\n 1. foo\n 2. bar\n> ", @out.string
end
def test_progress_reporter_silent_nil def test_progress_reporter_silent_nil
@cfg.verbose = nil @cfg.verbose = nil
reporter = @sui.progress_reporter 10, "hi" reporter = @sui.progress_reporter 10, "hi"