mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/reline] Check capname of tigetstr/tigetflag/tigetnum
Incorrect arguments can cause SEGV.
a58748bcf9
This commit is contained in:
parent
f375b6414d
commit
76181ae940
2 changed files with 6 additions and 0 deletions
|
@ -121,6 +121,7 @@ module Reline::Terminfo
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.tigetstr(capname)
|
def self.tigetstr(capname)
|
||||||
|
raise TerminfoError, "capname is not String: #{capname.inspect}" unless capname.is_a?(String)
|
||||||
capability = @tigetstr.(capname)
|
capability = @tigetstr.(capname)
|
||||||
case capability.to_i
|
case capability.to_i
|
||||||
when 0, -1
|
when 0, -1
|
||||||
|
@ -138,6 +139,7 @@ module Reline::Terminfo
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.tigetflag(capname)
|
def self.tigetflag(capname)
|
||||||
|
raise TerminfoError, "capname is not String: #{capname.inspect}" unless capname.is_a?(String)
|
||||||
flag = @tigetflag.(capname).to_i
|
flag = @tigetflag.(capname).to_i
|
||||||
case flag
|
case flag
|
||||||
when -1
|
when -1
|
||||||
|
@ -149,6 +151,7 @@ module Reline::Terminfo
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.tigetnum(capname)
|
def self.tigetnum(capname)
|
||||||
|
raise TerminfoError, "capname is not String: #{capname.inspect}" unless capname.is_a?(String)
|
||||||
num = @tigetnum.(capname).to_i
|
num = @tigetnum.(capname).to_i
|
||||||
case num
|
case num
|
||||||
when -2
|
when -2
|
||||||
|
|
|
@ -14,6 +14,7 @@ class Reline::Terminfo::Test < Reline::TestCase
|
||||||
|
|
||||||
def test_tigetstr_with_error
|
def test_tigetstr_with_error
|
||||||
assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetstr('unknown') }
|
assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetstr('unknown') }
|
||||||
|
assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetstr(nil) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_tiparm
|
def test_tiparm
|
||||||
|
@ -43,6 +44,7 @@ class Reline::Terminfo::Test < Reline::TestCase
|
||||||
def test_tigetflag_with_error
|
def test_tigetflag_with_error
|
||||||
assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetflag('cuu') }
|
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('unknown') }
|
||||||
|
assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetflag(nil) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_tigetnum
|
def test_tigetnum
|
||||||
|
@ -54,5 +56,6 @@ class Reline::Terminfo::Test < Reline::TestCase
|
||||||
def test_tigetnum_with_error
|
def test_tigetnum_with_error
|
||||||
assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetnum('cuu') }
|
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('unknown') }
|
||||||
|
assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetnum(nil) }
|
||||||
end
|
end
|
||||||
end if Reline::Terminfo.enabled?
|
end if Reline::Terminfo.enabled?
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue