Issue #7220 has been updated by drbrain (Eric Hodel).

Tracker changed from Bug to Feature
Subject changed from StringIO#initialize_copy causes aliasing between the objects to Separate IO#dup, StringIO#initialize_copy from dup(2)
Target version set to Next Major

This is intentional behavior which has existed since 1998. It is not a bug.

When I am working with IOs I expect the ruby methods to follow POSIX conventions more than ruby conventions. This method is not the only one in the standard library that doesn't follow ruby conventions.

If you wish to change this behavior you must demonstrate the change will be harmless easy for existing libraries to adapt to. I don't believe this is the case (due to the drastic change in behavior this would introduce), or that such a change is worthwhile after nearly 15 years.
----------------------------------------
Feature #7220: Separate IO#dup, StringIO#initialize_copy from dup(2)
https://bugs.ruby-lang.org/issues/7220#change-31740

Author: brixen (Brian Ford)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: Next Major


Calling StringIO#initialize_copy causes the two objects to share the position, and eof status.

Is this a bug?

sasha:rubinius brian$ irb
1.9.3p286 :001 > require 'stringio'
 => true 
1.9.3p286 :002 > a = StringIO.new "abcdefuq"
 => #<StringIO:0x00000101016a88> 
1.9.3p286 :003 > b = StringIO.new
 => #<StringIO:0x00000101010728> 
1.9.3p286 :004 > b.send :initialize_copy, a
 => #<StringIO:0x00000101010728> 
1.9.3p286 :005 > a.pos
 => 0 
1.9.3p286 :006 > b.pos
 => 0 
1.9.3p286 :007 > b.getc
 => "a" 
1.9.3p286 :008 > a.pos
 => 1 
1.9.3p286 :009 > a.getc
 => "b" 
1.9.3p286 :010 > b.pos
 => 2 
1.9.3p286 :011 > b.read
 => "cdefuq" 
1.9.3p286 :012 > a.eof?
 => true 

Thanks,
Brian


-- 
http://bugs.ruby-lang.org/