From: matz@... (Yukihiro Matsumoto) Date: 2003-08-27T00:16:04+09:00 Subject: [ruby-dev:21267] Re: Regexp#initializeが $SAFE==4 で落ちる まつもと ゆきひろです In message "[ruby-dev:21266] Re: Regexp#initializeが $SAFE==4 で落ちる" on 03/08/26, nobu.nakada@nifty.ne.jp writes: |> これだと$stderrを置き換える手が使えなくなりませんか? | |でも今のところ、http://mput.dip.jp:8080/mput/?date=20030826#p05 |のように、$stderrを置き換えてもwrite自体で例外になるので使えま |せん。 require 'stringio' $stderr = StringIO.new("".taint) # ←ここ重要 Thread.start { $SAFE=4 Regexp.new(//, Regexp::IGNORECASE) }.join p $stderr.string は動くみたいですけど。$SAFE=4のコードときちんと通信するのは それなりに難しいというだけのことでは。 |今思い付いたんですが、ArrayみたいにtaintされたIOに対するwriteで |は例外にしないとか。 検討の余地はあるかも。 |> また、$SAFE=4でabort(3)が呼ばれるのも避けたい気がします。 |> いや、後者はbugなんだから直せよって気はしますが。 | |そもそもrb_bug()はabort()を呼ぶためのものなので、違いは警告を出 |すかどうかだけです。 んじゃ、こっちは採用ということで。