[#38563] [Bug #1556] irb does not save history from 1.8.7-p83 and later — Nobuhiro IMAI <redmine@...>

Bug #1556: irb does not save history from 1.8.7-p83 and later

11 messages 2009/06/02

[#38571] [Bug #1582] IO.new Raises Other Errors between 1.8 and 1.9 — "ujihisa ." <redmine@...>

Bug #1582: IO.new Raises Other Errors between 1.8 and 1.9

15 messages 2009/06/05

[#38607] [Feature: trunk] GC.stat — SASADA Koichi <ko1@...>

 ささだです.

21 messages 2009/06/14

[#38608] Fixnum#fdiv — Tadayoshi Funaba <tadf@...>

Bignum#fdiv には大きな数である場合の配慮があるようですが、Fixnum ではな

23 messages 2009/06/14
[#38636] Re: Fixnum#fdiv — Tadayoshi Funaba <tadf@...> 2009/06/15

fdiv では2つの異る解釈が混在しているように見えます。

[#38638] Re: Fixnum#fdiv — Yukihiro Matsumoto <matz@...> 2009/06/15

まつもと ゆきひろです

[#38639] Re: Fixnum#fdiv — Tadayoshi Funaba <tadf@...> 2009/06/15

> えーと、設計者は「fdivは結果がfloatになるdiv」くらいしか考え

[#38640] Re: Fixnum#fdiv — Yukihiro Matsumoto <matz@...> 2009/06/15

まつもと ゆきひろです

[#38641] Re: Fixnum#fdiv — Tadayoshi Funaba <tadf@...> 2009/06/15

> ふむ。「中途半端」というのはfixnumとbignumで食い違うと言う意

[#38657] Re: Fixnum#fdiv — Tadayoshi Funaba <tadf@...> 2009/06/16

> > ふむ。「中途半端」というのはfixnumとbignumで食い違うと言う意

[#38659] Re: Fixnum#fdiv — Yukihiro Matsumoto <matz@...> 2009/06/16

まつもと ゆきひろです

[#38660] Re: Fixnum#fdiv — Tadayoshi Funaba <tadf@...> 2009/06/16

> 私が気にしているのは「挙動の理解しやすさ」ですね。

[#38701] [Bug #1676] only last "return" is traced by set_trace_func — _ wanabe <redmine@...>

Bug #1676: only last "return" is traced by set_trace_func

10 messages 2009/06/22

[ruby-dev:38648] Re: 1.9でstdin/out/errをcloseしないわけ

From: Tanaka Akira <akr@...>
Date: 2009-06-16 01:06:39 UTC
List: ruby-dev #38648
In article <[email protected]>,
  Yukihiro Matsumoto <[email protected]> writes:

> [ruby-core:23853]というレポートが来てて、要するに(ARGF経由
> で)STDINを明示的にcloseしてもclosed?が真にならないので1.8と
> 非互換という話なんですが、ソースを読むとfptr_finalize()中
> に
>
>     if (IS_PREP_STDIO(fptr) || fptr->fd <= 2) {
>         goto check_err;
>     }
>
> というコードがあって、どうも意図的に0,1,2はcloseしないように
> しているみたいなんですが、真意はなんなんでしょうね。

たとえば、stderr (fd=2) を close した状態で、ソケットで通信
しようしたとして fd が 2 になり、その状態で、ログを stderr
に出力すると、ソケットにログが出力されて通信が壊れます。

ソケットでなくデータベースだとデータベースが壊れるかもしれま
せん。

プログラムは 0, 1, 2 は標準入出力として用意されていて、open
や socket で新しくつくった fd が 0, 1, 2 であるとは考えない
ものです。0, 1, 2 を close することはその仮定を壊します。

これは場合によっては、CVE-2002-0572 のようなセキュリティ問題
にもなります。まぁ、CVE-2002-0572 はプログラムの中で close
を呼ぶという話ではないので、close しないことが対処になるわけ
ではありませんが。

なお、スレッドを考えると、0, 1, 2 だったらそれを他の fd に移
すというのもレースコンディションを発生させます。

これらを考えると、0, 1, 2 は close しないというのが適切であ
ろうという判断です。

どうしても 0, 1, 2 に対して close のようなことをしたければ、
/dev/null を reopen してください。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread