mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* parse.y (parser_tokadd_utf8, parser_tokadd_string): allow NUL
containing symbol literals, as well as String#to_sym. [ruby-dev:41447] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28084 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
abeb6dce85
commit
5d394118ff
4 changed files with 22 additions and 27 deletions
|
@ -1,3 +1,9 @@
|
|||
Sun May 30 03:40:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* parse.y (parser_tokadd_utf8, parser_tokadd_string): allow NUL
|
||||
containing symbol literals, as well as String#to_sym.
|
||||
[ruby-dev:41447]
|
||||
|
||||
Sun May 30 03:03:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* lib/rdoc/generator/template/darkfish/classpage.rhtml:
|
||||
|
|
15
parse.y
15
parse.y
|
@ -5487,11 +5487,6 @@ parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
|
|||
if (string_literal) tokaddmbc(codepoint, *encp);
|
||||
}
|
||||
else if (string_literal) {
|
||||
if (codepoint == 0 && symbol_literal) {
|
||||
yyerror("symbol cannot contain '\\u{0}'");
|
||||
return 0;
|
||||
}
|
||||
|
||||
tokadd(codepoint);
|
||||
}
|
||||
} while (string_literal && (peek(' ') || peek('\t')));
|
||||
|
@ -5519,11 +5514,6 @@ parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
|
|||
if (string_literal) tokaddmbc(codepoint, *encp);
|
||||
}
|
||||
else if (string_literal) {
|
||||
if (codepoint == 0 && symbol_literal) {
|
||||
yyerror("symbol cannot contain '\\u0000'");
|
||||
return 0;
|
||||
}
|
||||
|
||||
tokadd(codepoint);
|
||||
}
|
||||
}
|
||||
|
@ -5879,11 +5869,6 @@ parser_tokadd_string(struct parser_params *parser,
|
|||
pushback(c);
|
||||
break;
|
||||
}
|
||||
if (!c && (func & STR_FUNC_SYMBOL)) {
|
||||
func &= ~STR_FUNC_SYMBOL;
|
||||
compile_error(PARSER_ARG "symbol cannot contain '\\0'");
|
||||
continue;
|
||||
}
|
||||
if (c & 0x80) {
|
||||
has_nonascii = 1;
|
||||
if (enc != *encp) {
|
||||
|
|
|
@ -491,14 +491,16 @@ class TestParse < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_symbol
|
||||
assert_raise(SyntaxError) do
|
||||
eval ":'foo\0bar'"
|
||||
bug = '[ruby-dev:41447]'
|
||||
sym = "foo\0bar".to_sym
|
||||
assert_nothing_raised(SyntaxError, bug) do
|
||||
assert_equal(sym, eval(":'foo\0bar'"))
|
||||
end
|
||||
assert_raise(SyntaxError) do
|
||||
eval ':"foo\u0000bar"'
|
||||
assert_nothing_raised(SyntaxError, bug) do
|
||||
assert_equal(sym, eval(':"foo\u0000bar"'))
|
||||
end
|
||||
assert_raise(SyntaxError) do
|
||||
eval ':"foo\u{0}bar"'
|
||||
assert_nothing_raised(SyntaxError, bug) do
|
||||
assert_equal(sym, eval(':"foo\u{0}bar"'))
|
||||
end
|
||||
assert_raise(SyntaxError) do
|
||||
eval ':"foo\u{}bar"'
|
||||
|
|
|
@ -57,12 +57,14 @@ EOS
|
|||
assert_equal(:"\u{41}", :"\u0041")
|
||||
assert_equal(:ü, :"\u{fc}")
|
||||
|
||||
# the NUL character is not allowed in symbols
|
||||
assert_raise(SyntaxError) { eval %q(:"\u{0}")}
|
||||
assert_raise(SyntaxError) { eval %q(:"\u0000")}
|
||||
assert_raise(SyntaxError) { eval %q(:"\u{fc 0 0041}")}
|
||||
assert_raise(SyntaxError) { eval %q(:"\x00")}
|
||||
assert_raise(SyntaxError) { eval %q(:"\0")}
|
||||
# the NUL character is allowed in symbols
|
||||
bug = '[ruby-dev:41447]'
|
||||
sym = "\0".to_sym
|
||||
assert_nothing_raised(SyntaxError, bug) {assert_equal(sym, eval(%q(:"\u{0}")))}
|
||||
assert_nothing_raised(SyntaxError, bug) {assert_equal(sym, eval(%q(:"\u0000")))}
|
||||
assert_nothing_raised(SyntaxError, bug) {assert_equal("\u{fc}\0A".to_sym, eval(%q(:"\u{fc 0 0041}")))}
|
||||
assert_nothing_raised(SyntaxError, bug) {assert_equal(sym, eval(%q(:"\x00")))}
|
||||
assert_nothing_raised(SyntaxError, bug) {assert_equal(sym, eval(%q(:"\0")))}
|
||||
end
|
||||
|
||||
def test_regexp
|
||||
|
|
Loading…
Add table
Reference in a new issue