string.c: yield invalid part
* string.c (rb_enc_str_scrub): yield the invalid part only with ASCII-incompatible. [ruby-core:79039] [Bug #13120] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57303 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c763f0fb9b
commit
a3aa4da773
2
string.c
2
string.c
@ -9400,7 +9400,7 @@ rb_enc_str_scrub(rb_encoding *enc, VALUE str, VALUE repl)
|
|||||||
rb_str_buf_cat(buf, rep, replen);
|
rb_str_buf_cat(buf, rep, replen);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
repl = rb_yield(rb_enc_str_new(p, e-p, enc));
|
repl = rb_yield(rb_enc_str_new(p, clen, enc));
|
||||||
repl = str_compat_and_valid(repl, enc);
|
repl = str_compat_and_valid(repl, enc);
|
||||||
tainted |= OBJ_TAINTED_RAW(repl);
|
tainted |= OBJ_TAINTED_RAW(repl);
|
||||||
rb_str_buf_cat(buf, RSTRING_PTR(repl), RSTRING_LEN(repl));
|
rb_str_buf_cat(buf, RSTRING_PTR(repl), RSTRING_LEN(repl));
|
||||||
|
@ -1623,7 +1623,7 @@ class TestM17N < Test::Unit::TestCase
|
|||||||
assert_raise(ArgumentError){ u("\xE3\x81\x82\xE3\x81\x82\xE3\x81").scrub{u("\x81")} }
|
assert_raise(ArgumentError){ u("\xE3\x81\x82\xE3\x81\x82\xE3\x81").scrub{u("\x81")} }
|
||||||
assert_equal(e("\xA4\xA2\xA2\xAE"), e("\xA4\xA2\xA4").scrub{e("\xA2\xAE")})
|
assert_equal(e("\xA4\xA2\xA2\xAE"), e("\xA4\xA2\xA4").scrub{e("\xA2\xAE")})
|
||||||
|
|
||||||
assert_equal(u("\x81"), u("a\x81").scrub {|c| break c})
|
assert_equal(u("\x81"), u("a\x81c").scrub {|c| break c})
|
||||||
assert_raise(ArgumentError) {u("a\x81").scrub {|c| c}}
|
assert_raise(ArgumentError) {u("a\x81").scrub {|c| c}}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1641,8 +1641,8 @@ class TestM17N < Test::Unit::TestCase
|
|||||||
"\xff".force_encoding(Encoding::UTF_32LE).
|
"\xff".force_encoding(Encoding::UTF_32LE).
|
||||||
scrub)
|
scrub)
|
||||||
c = nil
|
c = nil
|
||||||
assert_equal("?".encode(Encoding::UTF_16LE),
|
assert_equal("?\u3042".encode(Encoding::UTF_16LE),
|
||||||
"\x00\xD8".force_encoding(Encoding::UTF_16LE).
|
"\x00\xD8\x42\x30".force_encoding(Encoding::UTF_16LE).
|
||||||
scrub {|e| c = e; "?".encode(Encoding::UTF_16LE)})
|
scrub {|e| c = e; "?".encode(Encoding::UTF_16LE)})
|
||||||
assert_equal("\x00\xD8".force_encoding(Encoding::UTF_16LE), c)
|
assert_equal("\x00\xD8".force_encoding(Encoding::UTF_16LE), c)
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user