[#44469] [Ruby 1.9 - Bug #5279][Open] $SAFEが3以上の時にString#encodeがSecurityErrorを発生させるケースがある — Shota Fukumori <sorah@...>

21 messages 2011/09/06
[#44471] [Ruby 1.9 - Bug #5279] $SAFEが3以上の時にString#encodeがSecurityErrorを発生させるケースがある — Shota Fukumori <sorah@...> 2011/09/06

[#44472] Re: [Ruby 1.9 - Bug #5279] $SAFEが3以上の時にString#encodeがSecurityErrorを発生させるケースがある — "NARUSE, Yui" <naruse@...> 2011/09/06

2011年9月6日11:02 Shota Fukumori <sorah@tubusu.net>:

[#44473] Re: [Ruby 1.9 - Bug #5279] $SAFEが3以上の時にString#encodeがSecurityErrorを発生させるケースがある — "Shota Fukumori (sora_h)" <sorah@...> 2011/09/06

じゃぁ,大丈夫かな.

[#44474] Re: [Ruby 1.9 - Bug #5279] $SAFEが3以上の時にString#encodeがSecurityErrorを発生させるケースがある — Kazuhiko <kazuhiko@...> 2011/09/06

On 06/09/2011 06:10, Shota Fukumori (sora_h) wrote:

[#44541] Re: [Ruby 1.9 - Bug #5279] $SAFEが3以上の時にString#encodeがSecurityErrorを発生させるケースがある — Kazuhiko <kazuhiko@...> 2011/09/24

かずひこです。

[#44549] Re: [Ruby 1.9 - Bug #5279] $SAFEが3以上の時にString#encodeがSecurityErrorを発生させるケースがある — KOSAKI Motohiro <kosaki.motohiro@...> 2011/09/26

> かずひこです。

[#44491] [Ruby 1.9 - Feature #5314][Open] パッケージマネージャをコアリリースに含めて欲しい — Taro MURAOKA <koron.kaoriya@...>

13 messages 2011/09/13

[#44506] [Ruby 1.9 - Feature #5317][Open] rubyのヘッダファイルを使った拡張を行う際にuid_tの宣言回避をする事が出来ない。 — Yasuhiro Matsumoto <mattn.jp@...>

9 messages 2011/09/13

[#44520] [Ruby 1.9 - Bug #5350][Open] WeakRef で謎の NoMethodError — Makoto Kishimoto <redmine@...>

20 messages 2011/09/21

[#44542] [Ruby 1.9 - Bug #5363][Open] OpenSSL::ASN1.decode_all の引数に PEM 形式の証明書を指定すると Segmentation fault が発生する — Hiroshi Yoshida <hexa.diary@...>

8 messages 2011/09/25

[#44546] [Ruby 1.9 - Bug #5368][Open] ensure節でsleepするようなThreadがあるとインタプリタが終了しない — Masaki Matsushita <glass.saga@...>

22 messages 2011/09/26

[ruby-dev:44524] [Ruby 1.9 - Bug #5355] Sync_mにBug #5195やBug #5258と同様のバグ

From: Masaki Matsushita <glass.saga@...>
Date: 2011-09-23 11:24:28 UTC
List: ruby-dev #44524
Issue #5355 has been updated by Masaki Matsushita.


[Bug #5350]に書くべきものを間違えてこちらに書いてしまいました。すみません。
----------------------------------------
Bug #5355: Sync_mにBug #5195やBug #5258と同様のバグ
http://redmine.ruby-lang.org/issues/5355

Author: Masaki Matsushita
Status: Open
Priority: Normal
Assignee: 
Category: lib
Target version: 1.9.x
ruby -v: ruby 1.9.4dev (2011-09-20 trunk 33301) [x86_64-linux]


=begin
Sync_mにもBug #5195やBug #5258と同様のバグがあります。

 require 'sync'
 
 class Foo; include Sync_m; end
 
 foo = Foo.new
 foo.sync_lock(:EX)
 
 t = Thread.new { foo.sync_lock(:EX) }
 
 nil until t.stop?
 p foo.sync_waiting
 
 t.wakeup
 
 nil until t.stop?
 p foo.sync_waiting

上記のコードを実行すると

 [#<Thread:0x00000001936858 sleep>]
 [#<Thread:0x00000001936858 sleep>, #<Thread:0x00000001936858 sleep>]
 
このように、起こされた際に@sync_waitingに再度Thread.currentをpushしてしまいます。
また、次のコードを実行すると、

 require 'sync'
 
 class Foo; include Sync_m; end
 
 foo = Foo.new
 foo.sync_lock(:SH)
 
 t = Thread.start do
 foo.sync_lock(:SH)
 foo.sync_lock(:EX)
 end
 
 nil until t.stop?
 p foo.sync_upgrade_waiting
 p foo.sync_waiting
 
 t.wakeup
 
 nil until t.stop?
 p foo.sync_upgrade_waiting
 p foo.sync_waiting

このような結果となります。

 [[#<Thread:0x000000015e04d8 sleep>, 1]]
 []
 [[#<Thread:0x000000015e04d8 sleep>, 1]]
 [#<Thread:0x000000015e04d8 sleep>]
 
複数のスレッドが共有ロックを保持している時にあるスレッドが共有ロックから排他ロックへ昇格しようとした場合、
共有ロックの開放を待つスレッドは@sync_upgrade_waitingにpushされますが、この状態からそのスレッドを起こすと、
@sync_upgrade_waitingではなく@sync_waitingにThread.currentがpushされます。

また、 http://redmine.ruby-lang.org/issues/5258#note-2 と同様の問題ですが、ロックの開放待ちで寝ているスレッドに例外を発生させると、
@waitingにpushされたスレッドはそのまま放置されてしまいます。

 require 'sync'
 
 class Foo; include Sync_m; end
 
 foo = Foo.new
 foo.sync_lock(:EX)
 
 t = Thread.new { foo.sync_lock(:EX) }
 
 nil until t.stop?
 p foo.sync_waiting
 t.raise
 nil while t.alive?
 p foo.sync_waiting
 
実行結果:

 [#<Thread:0x00000000e498f0 sleep>]
 [#<Thread:0x00000000e498f0 dead>]

以上の問題を解決するpatchを添付します。

=end


-- 
http://redmine.ruby-lang.org

In This Thread