* 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
parent b73891b5f1
commit 2e0a116dd5
3 changed files with 25 additions and 14 deletions

View File

@ -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> Tue Sep 16 00:51:59 2008 NARUSE, Yui <naruse@ruby-lang.org>
* encoding.c (Encoding#base_encoding): removed. [ruby-dev:36270] * encoding.c (Encoding#base_encoding): removed. [ruby-dev:36270]

28
re.c
View File

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

View File

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