[ruby-dev:48465] [ruby-trunk - Bug #9769] un-infection in StringIO#write
From:
nagachika00@...
Date:
2014-08-08 14:59:15 UTC
List:
ruby-dev #48465
Issue #9769 has been updated by Tomoyuki Chikanaga.
Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: REQUIRED, 2.1: DONE
r45676 and r45677 were backported into `ruby_2_1` branch.
----------------------------------------
Bug #9769: un-infection in StringIO#write
https://bugs.ruby-lang.org/issues/9769#change-48256
* Author: 宗介 相良
* Status: Closed
* Priority: Normal
* Assignee:
* Category:
* Target version:
* ruby -v: ruby 2.1.1p76 (2014-02-24 revision 45161) [amd64-freebsd10]
* Backport: 2.0.0: REQUIRED, 2.1: DONE
----------------------------------------
StringIO#write において、汚染された文字列を与えても汚染状態が伝播しません。
* 文字列の拡張を伴わない書き込み (こちらは伝播する)
$ ruby -r stringio -e 'str = "abcdefg"; sio = StringIO.new(str); sio << "hijklmn".taint; p str: str.tainted?, sio: sio.tainted?'
{:str=>true, :sio=>false}
* 文字列の拡張を伴う書き込み (こちらが伝播しない)
$ ruby -r stringio -e 'str = "abcdefg"; sio = StringIO.new(str, "ab"); sio << "hijklmn".taint; p str: str.tainted?, sio: sio.tainted?'
{:str=>false, :sio=>false}
内部文字列オブジェクトに伝播されたほうが好ましいと思います。
確認した限りでは 1.9.3、2.0.0、2.1.1 の挙動が同じとなっています。
添付いたしましたパッチの適用で、与えられた文字列の汚染状態を伝播するようになります。
$ ruby -r stringio -e 'str = "abcdefg"; sio = StringIO.new(str); sio << "hijklmn".taint; p str: str.tainted?, sio: sio.tainted?'
{:str=>true, :sio=>false}
$ ruby -r stringio -e 'str = "abcdefg"; sio = StringIO.new(str, "ab"); sio << "hijklmn".taint; p str: str.tainted?, sio: sio.tainted?'
{:str=>true, :sio=>false}
よろしくお願いします。
---Files--------------------------------
stringio_infect.patch (485 Bytes)
--
https://bugs.ruby-lang.org/