Issue #6099 has been reported by Usaku NAKAMURA.
Bug #6099: [BUG] probable buffer overflow
https://bugs.ruby-lang.org/issues/6099
Author: Usaku NAKAMURA
Status: Open
Priority: Low
Assignee:
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-02-27 trunk 34828) [i386-netbsdelf]
ふと思い立って以下のようなコードを実行してみたところ、表題の[BUG]となりました。
あんまり重大ではないと考えますが、一応報告しておきます。
他のメソッドでも似たようなことができるものはあると思います。
なお、プラットフォーム依存はないはずです。
% ruby -e ’
r, w = IO.pipe
buf = " " * 100
Thread.new{p r.sysread(100, buf)}
Thread.pass
buf.replace("")
p buf.bytesize; w.write(“a” * 100)
Thread.pass
’
Issue #6099 has been updated by Masaki M…
=begin
IO#readpartialにも同様の問題があるようです。
require “fcntl”
r, w = IO.pipe
r.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK)
buf = " " * 100
t = Thread.new{p r.readpartial(100, buf)}
sleep 0.1
Thread.pass
buf.replace("")
p buf.bytesize; w.write(“a” * 100)
Thread.pass
t.join
=end
Bug #6099: [BUG] probable buffer overflow
https://bugs.ruby-lang.org/issues/6099
Author: Usaku NAKAMURA
Status: Open
Priority: Low
Assignee:
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-02-27 trunk 34828) [i386-netbsdelf]
ふと思い立って以下のようなコードを実行してみたところ、表題の[BUG]となりました。
あんまり重大ではないと考えますが、一応報告しておきます。
他のメソッドでも似たようなことができるものはあると思います。
なお、プラットフォーム依存はないはずです。
% ruby -e ’
r, w = IO.pipe
buf = " " * 100
Thread.new{p r.sysread(100, buf)}
Thread.pass
buf.replace("")
p buf.bytesize; w.write(“a” * 100)
Thread.pass
’
Issue #6099 has been updated by Yui NARUSE.
Status changed from Closed to Assigned
Assignee set to Nobuyoshi N.
Priority changed from Low to Normal
Masaki M. wrote:
buf.replace("")
p buf.bytesize; w.write(“a” * 100)
Thread.pass
t.join
IO#readpartial は
-
It blocks only if ios has no data immediately available.
-
The later means that readpartial is nonblocking-flag insensitive.
-
It blocks on the situation IO#sysread causes Errno::EWOULDBLOCK as if
the fd is blocking mode.
などとある通り、r.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK) しても block することがあります。
よって、[BUG] が出たら明らかにおかしいんですが、そのコードが通ることを期待するのも間違っています。
Bug #6099: [BUG] probable buffer overflow
https://bugs.ruby-lang.org/issues/6099
Author: Usaku NAKAMURA
Status: Assigned
Priority: Normal
Assignee: Nobuyoshi N.
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-02-27 trunk 34828) [i386-netbsdelf]
ふと思い立って以下のようなコードを実行してみたところ、表題の[BUG]となりました。
あんまり重大ではないと考えますが、一応報告しておきます。
他のメソッドでも似たようなことができるものはあると思います。
なお、プラットフォーム依存はないはずです。
% ruby -e ’
r, w = IO.pipe
buf = " " * 100
Thread.new{p r.sysread(100, buf)}
Thread.pass
buf.replace("")
p buf.bytesize; w.write(“a” * 100)
Thread.pass
’
Issue #6099 has been updated by Glass_saga (Masaki M.).
Yui NARUSE wrote:
IO#readpartial は
- It blocks only if ios has no data immediately available.
- The later means that readpartial is nonblocking-flag insensitive.
- It blocks on the situation IO#sysread causes Errno::EWOULDBLOCK as if the fd
is blocking mode.
などとある通り、r.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK) しても block することがあります。
よって、[BUG] が出たら明らかにおかしいんですが、そのコードが通ることを期待するのも間違っています。
IO#readpartialも場合によってはblockする事があるんですね。
勉強になりました。
Bug #6099: [BUG] probable buffer overflow
https://bugs.ruby-lang.org/issues/6099#change-24961
Author: usa (Usaku NAKAMURA)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi N.)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-02-27 trunk 34828) [i386-netbsdelf]
ふと思い立って以下のようなコードを実行してみたところ、表題の[BUG]となりました。
あんまり重大ではないと考えますが、一応報告しておきます。
他のメソッドでも似たようなことができるものはあると思います。
なお、プラットフォーム依存はないはずです。
% ruby -e ’
r, w = IO.pipe
buf = " " * 100
Thread.new{p r.sysread(100, buf)}
Thread.pass
buf.replace("")
p buf.bytesize; w.write(“a” * 100)
Thread.pass
’
Issue #6099 has been updated by naruse (Yui NARUSE).
Status changed from Assigned to Closed
Bug #6099: [BUG] probable buffer overflow
https://bugs.ruby-lang.org/issues/6099#change-25003
Author: usa (Usaku NAKAMURA)
Status: Closed
Priority: Normal
Assignee: nobu (Nobuyoshi N.)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-02-27 trunk 34828) [i386-netbsdelf]
ふと思い立って以下のようなコードを実行してみたところ、表題の[BUG]となりました。
あんまり重大ではないと考えますが、一応報告しておきます。
他のメソッドでも似たようなことができるものはあると思います。
なお、プラットフォーム依存はないはずです。
% ruby -e ’
r, w = IO.pipe
buf = " " * 100
Thread.new{p r.sysread(100, buf)}
Thread.pass
buf.replace("")
p buf.bytesize; w.write(“a” * 100)
Thread.pass
’