* re.c (rb_reg_quote): use rb_enc_mbcput to generate ASCII

incompatible characters properly.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19369 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2008-09-15 16:01:08 +00:00
Родитель b73891b5f1
Коммит 2e0a116dd5
3 изменённых файлов: 25 добавлений и 14 удалений

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

@ -1,3 +1,8 @@
Tue Sep 16 00:57:56 2008 Tanaka Akira <akr@fsij.org>
* re.c (rb_reg_quote): use rb_enc_mbcput to generate ASCII
incompatible characters properly.
Tue Sep 16 00:51:59 2008 NARUSE, Yui <naruse@ruby-lang.org>
* encoding.c (Encoding#base_encoding): removed. [ruby-dev:36270]

28
re.c
Просмотреть файл

@ -2860,34 +2860,34 @@ rb_reg_quote(VALUE str)
case '*': case '.': case '\\':
case '?': case '+': case '^': case '$':
case '#':
*t++ = '\\';
t += rb_enc_mbcput('\\', t, enc);
break;
case ' ':
*t++ = '\\';
*t++ = ' ';
t += rb_enc_mbcput('\\', t, enc);
t += rb_enc_mbcput(' ', t, enc);
continue;
case '\t':
*t++ = '\\';
*t++ = 't';
t += rb_enc_mbcput('\\', t, enc);
t += rb_enc_mbcput('t', t, enc);
continue;
case '\n':
*t++ = '\\';
*t++ = 'n';
t += rb_enc_mbcput('\\', t, enc);
t += rb_enc_mbcput('n', t, enc);
continue;
case '\r':
*t++ = '\\';
*t++ = 'r';
t += rb_enc_mbcput('\\', t, enc);
t += rb_enc_mbcput('r', t, enc);
continue;
case '\f':
*t++ = '\\';
*t++ = 'f';
t += rb_enc_mbcput('\\', t, enc);
t += rb_enc_mbcput('f', t, enc);
continue;
case '\v':
*t++ = '\\';
*t++ = 'v';
t += rb_enc_mbcput('\\', t, enc);
t += rb_enc_mbcput('v', t, enc);
continue;
}
*t++ = c;
t += rb_enc_mbcput(c, t, enc);
}
rb_str_resize(tmp, t - RSTRING_PTR(tmp));
OBJ_INFECT(tmp, str);

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

@ -355,4 +355,10 @@ EOT
assert_equal("", sl.chop)
assert_equal("", sb.chop)
end
def test_regexp_escape
s = "\0*".force_encoding("UTF-16BE")
r = Regexp.new(Regexp.escape(s))
assert(r =~ s)
end
end