[ruby/stringio] Define `StringIO::MAX_LENGTH`

https://github.com/ruby/stringio/commit/0205bd1c86
This commit is contained in:
Nobuyoshi Nakada 2024-03-13 19:13:37 +09:00 коммит произвёл git
Родитель 2fc551e34e
Коммит 3f8ef7ff7c
2 изменённых файлов: 8 добавлений и 4 удалений

Просмотреть файл

@ -1861,6 +1861,10 @@ Init_stringio(void)
rb_include_module(StringIO, rb_mEnumerable); rb_include_module(StringIO, rb_mEnumerable);
rb_define_alloc_func(StringIO, strio_s_allocate); rb_define_alloc_func(StringIO, strio_s_allocate);
/* Maximum length that a StringIO instance can hold */
rb_define_const(StringIO, "MAX_LENGTH", LONG2NUM(LONG_MAX));
rb_define_singleton_method(StringIO, "new", strio_s_new, -1); rb_define_singleton_method(StringIO, "new", strio_s_new, -1);
rb_define_singleton_method(StringIO, "open", strio_s_open, -1); rb_define_singleton_method(StringIO, "open", strio_s_open, -1);
rb_define_method(StringIO, "initialize", strio_initialize, -1); rb_define_method(StringIO, "initialize", strio_initialize, -1);

Просмотреть файл

@ -237,9 +237,8 @@ class TestStringIO < Test::Unit::TestCase
def test_write_integer_overflow def test_write_integer_overflow
f = StringIO.new f = StringIO.new
f.pos = StringIO::MAX_LENGTH
assert_raise(ArgumentError) { assert_raise(ArgumentError) {
# JRuby errors when setting pos to an out-of-range value
f.pos = RbConfig::LIMITS["LONG_MAX"]
f.write("pos + len overflows") f.write("pos + len overflows")
} }
end end
@ -900,8 +899,9 @@ class TestStringIO < Test::Unit::TestCase
end end
def test_overflow def test_overflow
return if RbConfig::SIZEOF["void*"] > RbConfig::SIZEOF["long"] intptr_max = RbConfig::LIMITS["INTPTR_MAX"]
limit = RbConfig::LIMITS["INTPTR_MAX"] - 0x10 return if intptr_max > StringIO::MAX_LENGTH
limit = intptr_max - 0x10
assert_separately(%w[-rstringio], "#{<<-"begin;"}\n#{<<-"end;"}") assert_separately(%w[-rstringio], "#{<<-"begin;"}\n#{<<-"end;"}")
begin; begin;
limit = #{limit} limit = #{limit}