Bug #9769
closedun-infection in StringIO#write
Description
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
Updated by shyouhei (Shyouhei Urabe) over 10 years ago
念のため: このバグ報告はsecurity@ruby-lang.orgに送られていたものですが、中の人たちの判断によりこちらにて議論されることになりました。
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
Applied in changeset r45670.
stringio.c: use rb_str_append
- ext/stringio/stringio.c (strio_write): use rb_str_append to
reuse coderange bits and keep taintedness.
[ruby-dev:48118] [Bug #9769]
Updated by usa (Usaku NAKAMURA) over 10 years ago
- Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN to 2.0.0: REQUIRED, 2.1: REQUIRED
Updated by nagachika (Tomoyuki Chikanaga) over 10 years ago
- 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.
Updated by usa (Usaku NAKAMURA) about 10 years ago
- Backport changed from 2.0.0: REQUIRED, 2.1: DONE to 2.0.0: DONE, 2.1: DONE
backported into ruby_2_0_0
at r47366.