Bug #7231
closedStringIO inconsistently raises IOError or RuntimeError if the string is frozen
Description
StringIO#ungetc, #ungetbyte raise RuntimeError if the data string is frozen. StringIO#write raises IOError.
Why?
1.9.3p286 :001 > require 'stringio'
=> true
1.9.3p286 :002 > s = StringIO.new x = "abc"
=> #StringIO:0x00000101020038
1.9.3p286 :003 > x.freeze
=> "abc"
1.9.3p286 :004 > s.ungetbyte 0x42
RuntimeError: can't modify frozen String
from (irb):4:in ungetbyte' from (irb):4 from /Users/brian/.rvm/rubies/ruby-1.9.3-p286/bin/irb:16:in
'
1.9.3p286 :005 > s.ungetc "w"
RuntimeError: can't modify frozen String
from (irb):5:in ungetc' from (irb):5 from /Users/brian/.rvm/rubies/ruby-1.9.3-p286/bin/irb:16:in
'
1.9.3p286 :006 > s.write "d"
IOError: not modifiable string
from (irb):6:in write' from (irb):6 from /Users/brian/.rvm/rubies/ruby-1.9.3-p286/bin/irb:16:in
'
Thanks,
Brian
Files
Updated by mame (Yusuke Endoh) about 12 years ago
Indeed. I think that it should raise IOError constantly. Any opinion?
Anyone could create a patch, please?
--
Yusuke Endoh mame@tsg.ne.jp
Updated by usa (Usaku NAKAMURA) almost 12 years ago
- Category set to ext
- Status changed from Open to Assigned
- Assignee set to nobu (Nobuyoshi Nakada)
- Target version set to 2.0.0
Updated by Glass_saga (Masaki Matsushita) almost 12 years ago
- File patch.diff patch.diff added
How about the patch?
Updated by Anonymous almost 12 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r38628.
Brian, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
-
ext/stringio/stringio.c (strio_ungetc): raise IOError instead of RuntimeError
if the string is frozen.
[Bug #7231] [ruby-core:48530] -
ext/stringio/stringio.c (strio_ungetbyte): ditto.
-
test/stringio/test_stringio.rb: a test for above.