mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* sprintf.c (rb_f_sprintf): more checks for format argument.
[ruby-core:11569], [ruby-core:11570], [ruby-core:11571], [ruby-core:11573] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12803 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
66e1be60c3
commit
192c936e23
3 changed files with 74 additions and 26 deletions
|
@ -138,4 +138,37 @@ class TestSprintf < Test::Unit::TestCase
|
|||
assert_equal("-Inf ", sprintf("%- 08f", -inf))
|
||||
assert_equal("-0000Inf", sprintf("%+ 08f", -inf))
|
||||
end
|
||||
|
||||
def test_invalid
|
||||
# [ruby-core:11569]
|
||||
|
||||
# Star precision before star width:
|
||||
assert_raise(ArgumentError) {sprintf("%.**d", 5, 10, 1)}
|
||||
|
||||
# Precision before flags and width:
|
||||
assert_raise(ArgumentError) {sprintf("%.5+05d", 5)}
|
||||
assert_raise(ArgumentError) {sprintf("%.5 5d", 5)}
|
||||
|
||||
# Overriding a star width with a numeric one:
|
||||
assert_raise(ArgumentError) {sprintf("%*1s", 5, 1)}
|
||||
|
||||
# Width before flags:
|
||||
assert_raise(ArgumentError) {sprintf("%5+0d", 1)}
|
||||
assert_raise(ArgumentError) {sprintf("%5 0d", 1)}
|
||||
|
||||
# Specifying width multiple times:
|
||||
assert_raise(ArgumentError) {sprintf("%50+30+20+10+5d", 5)}
|
||||
assert_raise(ArgumentError) {sprintf("%50 30 20 10 5d", 5)}
|
||||
|
||||
# [ruby-core:11570]
|
||||
# Specifying the precision multiple times with negative star arguments:
|
||||
assert_raise(ArgumentError) {sprintf("%.*.*.*.*f", -1, -1, -1, 5, 1)}
|
||||
|
||||
# [ruby-core:11571]
|
||||
# Null bytes after percent signs are removed:
|
||||
assert_equal("%\0x hello", sprintf("%\0x hello"))
|
||||
|
||||
# [ruby-core:11573]
|
||||
assert_raise(ArgumentError) {sprintf("%.25555555555555555555555555555555555555s", "hello")}
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue