Forum: Ruby-core [ruby-trunk - Bug #8866][Assigned] frozen string literal("foo"f ) can ignore source encoding after r

5cf8f058a4c094bb708174fb43e7a387?d=identicon&s=25 nagachika (Tomoyuki Chikanaga) (Guest)
on 2013-09-05 10:49
(Received via mailing list)
Issue #8866 has been reported by nagachika (Tomoyuki Chikanaga).

----------------------------------------
Bug #8866: frozen string literal("foo"f ) can ignore source encoding
after r42843.
https://bugs.ruby-lang.org/issues/8866

Author: nagachika (Tomoyuki Chikanaga)
Status: Assigned
Priority: Normal
Assignee: charliesome (Charlie Somerville)
Category: core
Target version: current: 2.1.0
ruby -v: ruby 2.1.0dev (2013-09-05 trunk 42844) [x86_64-darwin11.4.2]
Backport: 1.9.3: DONTNEED, 2.0.0: DONTNEED


Hello,

After r42843, frozen string literal can have encoding different from
script encoding.

example:

usascii.rb:
# coding: us-ascii
def usascii
  "foo"f
end

utf8.rb:
# coding: utf-8
def utf8
  "foo"f
end

$ ruby -r./usascii -r./utf8 -e 'p [usascii.object_id == utf8.object_id,
usascii.encoding, utf8.encoding]'
[true, #<Encoding:US-ASCII>, #<Encoding:US-ASCII>]
$ ruby -r./utf8 -r./usascii -e 'p [usascii.object_id == utf8.object_id,
usascii.encoding, utf8.encoding]'
[true, #<Encoding:UTF-8>, #<Encoding:UTF-8>]

It is because fstring_hash_type use rb_str_cmd for compare functions.
rb_str_cmd() treat strings contains only ascii characters with ascii
compatible encodings as same strings.

Regards.
This topic is locked and can not be replied to.