Project

General

Profile

Bug #5836

#slice results inconsistent after #force_encoding to a valid encoding

Added by brixen (Brian Shirai) almost 8 years ago. Updated almost 8 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin10.8.0]
Backport:
[ruby-core:41896]

Description

I was not able to reduce this further. After calling #force_encoding, #slice returns inconsistent results:

ruby-1.9.3-p0 :001 > RUBY_DESCRIPTION
=> "ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin10.8.0]"
ruby-1.9.3-p0 :002 > s = "abc"
=> "abc"
ruby-1.9.3-p0 :003 > s.size
=> 3
ruby-1.9.3-p0 :004 > s.encoding
=> #Encoding:UTF-8
ruby-1.9.3-p0 :005 > s.valid_encoding?
=> true
ruby-1.9.3-p0 :006 > s.slice 3
=> nil
ruby-1.9.3-p0 :007 > s.slice 3, 1
=> ""
ruby-1.9.3-p0 :008 > s
=> "abc"
ruby-1.9.3-p0 :009 > s.force_encoding 'ascii-8bit'
=> "abc"
ruby-1.9.3-p0 :010 > s.slice 3
=> nil
ruby-1.9.3-p0 :011 > s.slice 3, 1
=> ""
ruby-1.9.3-p0 :012 > s
=> "abc"
ruby-1.9.3-p0 :013 > s.valid_encoding?
=> true
ruby-1.9.3-p0 :014 > s.force_encoding 'euc-jp'
=> "abc"
ruby-1.9.3-p0 :015 > s.slice 3
=> nil
ruby-1.9.3-p0 :016 > s.slice 3, 1
=> nil
ruby-1.9.3-p0 :017 > s.valid_encoding?
=> true

Thanks,
Brian

Associated revisions

Revision 46052828
Added by nobu (Nobuyoshi Nakada) almost 8 years ago

  • string.c (str_nth_len): count ascii-only run at the end. this bug appears only when single-byte-optimization is disabled due to unknown coderange. [ruby-core:41896] [Bug #5836]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34208 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 34208
Added by nobu (Nobuyoshi Nakada) almost 8 years ago

  • string.c (str_nth_len): count ascii-only run at the end. this bug appears only when single-byte-optimization is disabled due to unknown coderange. [ruby-core:41896] [Bug #5836]

Revision 34208
Added by nobu (Nobuyoshi Nakada) almost 8 years ago

  • string.c (str_nth_len): count ascii-only run at the end. this bug appears only when single-byte-optimization is disabled due to unknown coderange. [ruby-core:41896] [Bug #5836]

Revision 34208
Added by nobu (Nobuyoshi Nakada) almost 8 years ago

  • string.c (str_nth_len): count ascii-only run at the end. this bug appears only when single-byte-optimization is disabled due to unknown coderange. [ruby-core:41896] [Bug #5836]

Revision 34208
Added by nobu (Nobuyoshi Nakada) almost 8 years ago

  • string.c (str_nth_len): count ascii-only run at the end. this bug appears only when single-byte-optimization is disabled due to unknown coderange. [ruby-core:41896] [Bug #5836]

Revision 34208
Added by nobu (Nobuyoshi Nakada) almost 8 years ago

  • string.c (str_nth_len): count ascii-only run at the end. this bug appears only when single-byte-optimization is disabled due to unknown coderange. [ruby-core:41896] [Bug #5836]

Revision 34208
Added by nobu (Nobuyoshi Nakada) almost 8 years ago

  • string.c (str_nth_len): count ascii-only run at the end. this bug appears only when single-byte-optimization is disabled due to unknown coderange. [ruby-core:41896] [Bug #5836]

History

Updated by manveru (Michael Fellinger) almost 8 years ago

I've reduced the code a bit, calling force_encoding seems to cause it, and calling valid_encoding? repairs the damage.

s = 'abc'
p [s.slice(3), s.slice(3, 1)]
[nil, ""]

s.force_encoding 'euc-jp'
p [s.slice(3), s.slice(3, 1)]
[nil, nil]

s.valid_encoding?
p [s.slice(3), s.slice(3, 1)]
[nil, ""]

s.force_encoding 'euc-jp'
p [s.slice(3), s.slice(3, 1)]
[nil, nil]

#2

Updated by nobu (Nobuyoshi Nakada) almost 8 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r34208.
Brian, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • string.c (str_nth_len): count ascii-only run at the end. this bug appears only when single-byte-optimization is disabled due to unknown coderange. [ruby-core:41896] [Bug #5836]

Also available in: Atom PDF