[ruby-dev:50430] [Ruby trunk Bug#14388] 不正エンコーディング文字列から切り出した正当なエンコーディング文字列が invalid encoding になる
From:
tommy@...
Date:
2018-01-25 03:52:48 UTC
List:
ruby-dev #50430
Issue #14388 has been updated by tommy (Masahiro Tomita).
Rubyの内部のコードにはあんまり詳しくないんですけど、これで直ると思うのですがどうでしょうか。
```diff
diff --git a/string.c b/string.c
index 82fa603ada..9079387fac 100644
--- a/string.c
+++ b/string.c
@@ -2560,6 +2560,7 @@ str_substr(VALUE str, long beg, long len, int empty)
str2 = str_new_shared(rb_obj_class(str2), str2);
RSTRING(str2)->as.heap.ptr += ofs;
RSTRING(str2)->as.heap.len = len;
+ ENC_CODERANGE_CLEAR(str2);
}
else {
if (!len && !empty) return Qnil;
```
----------------------------------------
Bug #14388: 不正エンコーディング文字列から切り出した正当なエンコーディング文字列が invalid encoding になる
https://bugs.ruby-lang.org/issues/14388#change-69807
* Author: tommy (Masahiro Tomita)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
~~~ ruby
data = "\xFFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
p data.encoding #=> #<Encoding:UTF-8>
p data #=> "\xFFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
p data.valid_encoding? #=> false
data2 = data[1..-1]
p data2 #=> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
p data2.valid_encoding? #=> false
data3 = data2 + ""
p data3.valid_encoding? #=> true
~~~
data は invalid ですが、data から切り出した data2 は valid のはずです。
末尾に空文字列を追加すると valid になります。
--
https://bugs.ruby-lang.org/