mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* enc/shift_jis.c (code_to_mbclen): return
ONIGERR_INVALID_CODE_POINT_VALUE if the code is invalid. * enc/shift_jis.c (tr_next): increment character until the code is a valid character. [ruby-dev:45652] [Bug #6450] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35724 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
44faaf110f
commit
2053b5f453
4 changed files with 39 additions and 5 deletions
|
@ -1,3 +1,11 @@
|
|||
Sun May 20 21:36:39 2012 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* enc/shift_jis.c (code_to_mbclen): return
|
||||
ONIGERR_INVALID_CODE_POINT_VALUE if the code is invalid.
|
||||
|
||||
* enc/shift_jis.c (tr_next): increment character until the code
|
||||
is a valid character. [ruby-dev:45652] [Bug #6450]
|
||||
|
||||
Sun May 20 12:25:10 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* Makefile.in (LIBRUBY_SO): link EXTSOLIBS too.
|
||||
|
|
|
@ -230,6 +230,9 @@ code_to_mbclen(OnigCodePoint code, OnigEncoding enc ARG_UNUSED)
|
|||
return ONIGERR_INVALID_CODE_POINT_VALUE;
|
||||
}
|
||||
else if (code <= 0xffff) {
|
||||
int low = code & 0xff;
|
||||
if (low < 0x40 || low == 0x7f || 0xfc < low)
|
||||
return ONIGERR_INVALID_CODE_POINT_VALUE;
|
||||
return 2;
|
||||
}
|
||||
else
|
||||
|
|
19
string.c
19
string.c
|
@ -4967,6 +4967,7 @@ trnext(struct tr *t, rb_encoding *enc)
|
|||
|
||||
for (;;) {
|
||||
if (!t->gen) {
|
||||
nextpart:
|
||||
if (t->p == t->pend) return -1;
|
||||
if (rb_enc_ascget(t->p, t->pend, &n, enc) == '\\' && t->p + n < t->pend) {
|
||||
t->p += n;
|
||||
|
@ -4995,12 +4996,20 @@ trnext(struct tr *t, rb_encoding *enc)
|
|||
}
|
||||
return t->now;
|
||||
}
|
||||
else if (++t->now < t->max) {
|
||||
return t->now;
|
||||
}
|
||||
else {
|
||||
t->gen = 0;
|
||||
return t->max;
|
||||
while (ONIGENC_CODE_TO_MBCLEN(enc, ++t->now) <= 0) {
|
||||
if (t->now == t->max) {
|
||||
t->gen = 0;
|
||||
goto nextpart;
|
||||
}
|
||||
}
|
||||
if (t->now < t->max) {
|
||||
return t->now;
|
||||
}
|
||||
else {
|
||||
t->gen = 0;
|
||||
return t->max;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1236,6 +1236,20 @@ class TestM17NComb < Test::Unit::TestCase
|
|||
}
|
||||
end
|
||||
|
||||
def test_tr_sjis
|
||||
expected = "\x83}\x83~\x83\x80\x83\x81\x83\x82".force_encoding(Encoding::SJIS)
|
||||
source = "\xCF\xD0\xD1\xD2\xD3".force_encoding(Encoding::SJIS)
|
||||
from = "\xCF-\xD3".force_encoding(Encoding::SJIS)
|
||||
to = "\x83}-\x83\x82".force_encoding(Encoding::SJIS)
|
||||
assert_equal(expected, source.tr(from, to))
|
||||
|
||||
expected = "\x84}\x84~\x84\x80\x84\x81\x84\x82".force_encoding(Encoding::SJIS)
|
||||
source = "\x84M\x84N\x84O\x84P\x84Q".force_encoding(Encoding::SJIS)
|
||||
from = "\x84@-\x84`".force_encoding(Encoding::SJIS)
|
||||
to = "\x84p-\x84\x91".force_encoding(Encoding::SJIS)
|
||||
assert_equal(expected, source.tr(from, to))
|
||||
end
|
||||
|
||||
def test_tr_s
|
||||
combination(STRINGS, STRINGS, STRINGS) {|s1, s2, s3|
|
||||
desc = "#{encdump s1}.tr_s(#{encdump s2}, #{encdump s3})"
|
||||
|
|
Loading…
Reference in a new issue