[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]