ruby-changes:70698
From: aycabta <ko1@a...>
Date: Sun, 2 Jan 2022 11:44:15 +0900 (JST)
Subject: [ruby-changes:70698] 76181ae940 (master): [ruby/reline] Check capname of tigetstr/tigetflag/tigetnum
https://git.ruby-lang.org/ruby.git/commit/?id=76181ae940 From 76181ae940c485d80990941d064f8fdc26b3b4ee Mon Sep 17 00:00:00 2001 From: aycabta <aycabta@g...> Date: Sun, 2 Jan 2022 11:44:45 +0900 Subject: [ruby/reline] Check capname of tigetstr/tigetflag/tigetnum Incorrect arguments can cause SEGV. https://github.com/ruby/reline/commit/a58748bcf9 --- lib/reline/terminfo.rb | 3 +++ test/reline/test_terminfo.rb | 3 +++ 2 files changed, 6 insertions(+) diff --git a/lib/reline/terminfo.rb b/lib/reline/terminfo.rb index 95ff082172a..b053ba82c4c 100644 --- a/lib/reline/terminfo.rb +++ b/lib/reline/terminfo.rb @@ -121,6 +121,7 @@ module Reline::Terminfo https://github.com/ruby/ruby/blob/trunk/lib/reline/terminfo.rb#L121 end def self.tigetstr(capname) + raise TerminfoError, "capname is not String: #{capname.inspect}" unless capname.is_a?(String) capability = @tigetstr.(capname) case capability.to_i when 0, -1 @@ -138,6 +139,7 @@ module Reline::Terminfo https://github.com/ruby/ruby/blob/trunk/lib/reline/terminfo.rb#L139 end def self.tigetflag(capname) + raise TerminfoError, "capname is not String: #{capname.inspect}" unless capname.is_a?(String) flag = @tigetflag.(capname).to_i case flag when -1 @@ -149,6 +151,7 @@ module Reline::Terminfo https://github.com/ruby/ruby/blob/trunk/lib/reline/terminfo.rb#L151 end def self.tigetnum(capname) + raise TerminfoError, "capname is not String: #{capname.inspect}" unless capname.is_a?(String) num = @tigetnum.(capname).to_i case num when -2 diff --git a/test/reline/test_terminfo.rb b/test/reline/test_terminfo.rb index b969da1397b..dda9b324954 100644 --- a/test/reline/test_terminfo.rb +++ b/test/reline/test_terminfo.rb @@ -14,6 +14,7 @@ class Reline::Terminfo::Test < Reline::TestCase https://github.com/ruby/ruby/blob/trunk/test/reline/test_terminfo.rb#L14 def test_tigetstr_with_error assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetstr('unknown') } + assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetstr(nil) } end def test_tiparm @@ -43,6 +44,7 @@ class Reline::Terminfo::Test < Reline::TestCase https://github.com/ruby/ruby/blob/trunk/test/reline/test_terminfo.rb#L44 def test_tigetflag_with_error assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetflag('cuu') } assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetflag('unknown') } + assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetflag(nil) } end def test_tigetnum @@ -54,5 +56,6 @@ class Reline::Terminfo::Test < Reline::TestCase https://github.com/ruby/ruby/blob/trunk/test/reline/test_terminfo.rb#L56 def test_tigetnum_with_error assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetnum('cuu') } assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetnum('unknown') } + assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetnum(nil) } end end if Reline::Terminfo.enabled? -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/