Fix unsigned int overflow in error message for chr
The error message has an integer overflow because it treats an unsigned int as a signed int. Before: ``` > 3_000_000_000.chr -1294967296 out of char range (RangeError) ``` After: ``` > 3_000_000_000.chr 3000000000 out of char range (RangeError) ``` Redmine ticket: https://bugs.ruby-lang.org/issues/17186
This commit is contained in:
parent
cece71b467
commit
f7bd9f0750
Notes:
git
2020-09-30 00:32:35 +09:00
@ -3417,7 +3417,7 @@ int_chr(int argc, VALUE *argv, VALUE num)
|
|||||||
if (0xff < i) {
|
if (0xff < i) {
|
||||||
enc = rb_default_internal_encoding();
|
enc = rb_default_internal_encoding();
|
||||||
if (!enc) {
|
if (!enc) {
|
||||||
rb_raise(rb_eRangeError, "%d out of char range", i);
|
rb_raise(rb_eRangeError, "%u out of char range", i);
|
||||||
}
|
}
|
||||||
goto decode;
|
goto decode;
|
||||||
}
|
}
|
||||||
|
@ -260,6 +260,7 @@ class TestInteger < Test::Unit::TestCase
|
|||||||
assert_equal("a", "a".ord.chr)
|
assert_equal("a", "a".ord.chr)
|
||||||
assert_raise(RangeError) { (-1).chr }
|
assert_raise(RangeError) { (-1).chr }
|
||||||
assert_raise(RangeError) { 0x100.chr }
|
assert_raise(RangeError) { 0x100.chr }
|
||||||
|
assert_raise_with_message(RangeError, "3000000000 out of char range") { 3_000_000_000.chr }
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_upto
|
def test_upto
|
||||||
|
Loading…
x
Reference in New Issue
Block a user