diff options
author | tompng <[email protected]> | 2024-01-17 01:16:31 +0900 |
---|---|---|
committer | Jean Boussier <[email protected]> | 2024-06-13 18:27:02 +0200 |
commit | 04467218ce53292659ae74fb4558e651bfc41f0f (patch) | |
tree | 030e3eb5492b06e528c3ba5b2a9c88ae7cb731a3 | |
parent | 9c7374b0e6cbfb00e4f71d0b2eddba128ba452f7 (diff) |
Add rb_str_resize coderange test
-rw-r--r-- | ext/-test-/string/set_len.c | 8 | ||||
-rw-r--r-- | test/-ext-/string/test_set_len.rb | 18 |
2 files changed, 26 insertions, 0 deletions
diff --git a/ext/-test-/string/set_len.c b/ext/-test-/string/set_len.c index 049da2cdb5..b55ef6f469 100644 --- a/ext/-test-/string/set_len.c +++ b/ext/-test-/string/set_len.c @@ -16,9 +16,17 @@ bug_str_append(VALUE str, VALUE addendum) return str; } +static VALUE +bug_str_resize(VALUE str, VALUE len) +{ + rb_str_resize(str, NUM2LONG(len)); + return str; +} + void Init_string_set_len(VALUE klass) { rb_define_method(klass, "set_len", bug_str_set_len, 1); rb_define_method(klass, "append", bug_str_append, 1); + rb_define_method(klass, "resize", bug_str_resize, 1); } diff --git a/test/-ext-/string/test_set_len.rb b/test/-ext-/string/test_set_len.rb index e3eff75d9b..1531d76167 100644 --- a/test/-ext-/string/test_set_len.rb +++ b/test/-ext-/string/test_set_len.rb @@ -63,4 +63,22 @@ class Test_StrSetLen < Test::Unit::TestCase assert_not_predicate str, :ascii_only? assert_equal u, str end + + def test_valid_encoding_after_resized + s = "\0\0".force_encoding(Encoding::UTF_16BE) + str = Bug::String.new(s) + assert_predicate str, :valid_encoding? + str.resize(1) + assert_not_predicate str, :valid_encoding? + str.resize(2) + assert_predicate str, :valid_encoding? + str.resize(3) + assert_not_predicate str, :valid_encoding? + + s = "\xDB\x00\xDC\x00".force_encoding(Encoding::UTF_16BE) + str = Bug::String.new(s) + assert_predicate str, :valid_encoding? + str.resize(2) + assert_not_predicate str, :valid_encoding? + end end |