Bug #11679 ยป 0001-Do-not-allow-partial-name-in-magic-comments.patch
parse.y | ||
---|---|---|
if (s[i] == '-') s[i] = '_';
|
||
}
|
||
do {
|
||
if (STRNCASECMP(p->name, s, n) == 0) {
|
||
if (n == (long)strlen(p->name) && STRNCASECMP(p->name, s, n) == 0) {
|
||
n = vend - vbeg;
|
||
if (p->length) {
|
||
n = (*p->length)(parser, vbeg, n);
|
test/ruby/test_literal.rb | ||
---|---|---|
assert_equal "foo\n", `echo #{s}`
|
||
end
|
||
def test_string_encoding_with_magic_comments
|
||
all_assertions do |a|
|
||
a.for("utf-8 string with indicator") do
|
||
str = eval("# -*- coding: utf-8 -*-\n""'foo'")
|
||
assert_equal(Encoding::UTF_8, str.encoding)
|
||
end
|
||
a.for("utf-8 string without indicator") do
|
||
str = eval("# coding: utf-8\n""'foo'")
|
||
assert_equal(Encoding::UTF_8, str.encoding)
|
||
end
|
||
a.for("us_ascii string with no magic comments") do
|
||
str = eval("'foo'")
|
||
assert_equal(Encoding::US_ASCII, str.encoding)
|
||
end
|
||
a.for("us_ascii string with invalid magic comments") do
|
||
str = eval("# c: utf-8\n""'foo'")
|
||
assert_equal(Encoding::US_ASCII, str.encoding)
|
||
end
|
||
a.for("us_ascii string with invalid magic comments and indicator") do
|
||
str = eval("# -*- c: utf-8 -*- \n""'foo'")
|
||
assert_equal(Encoding::US_ASCII, str.encoding)
|
||
end
|
||
end
|
||
end
|
||
def test_frozen_string
|
||
all_assertions do |a|
|
||
a.for("false with indicator") do
|
||
... | ... | |
str = eval("# frozen-string-literal: false x\n""'foo'")
|
||
assert_not_predicate(str, :frozen?)
|
||
end
|
||
a.for("true with succeeding garbage") do
|
||
str = eval("# frozen-string-literal: true x\n""'foo'")
|
||
a.for("false with invalid name") do
|
||
str = eval("# frozen: true\n""'foo'")
|
||
assert_not_predicate(str, :frozen?)
|
||
end
|
||
end
|