[#46908] [ruby-trunk - Bug #7774][Assigned] IFUNC上のbinding呼び出しでSEGV — "ktsj (Kazuki Tsujimoto)" <kazuki@...>

16 messages 2013/02/03

[#47075] [ruby-trunk - Bug #7924][Open] r39232 以降 net/http で正しく reponse を取得出来ないケースがある — "hsbt (Hiroshi SHIBATA)" <shibata.hiroshi@...>

15 messages 2013/02/23

[ruby-dev:47100] [ruby-trunk - Bug #7947][Assigned] Queue#clear の返り値が Queue 内部の配列になっている

From: "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>
Date: 2013-02-24 19:53:39 UTC
List: ruby-dev #47100
Issue #7947 has been updated by kosaki (Motohiro KOSAKI).

Category set to core
Status changed from Open to Assigned
Assignee set to kosaki (Motohiro KOSAKI)
Target version set to 2.1.0

review ok です。あとで簡単なテストして取り込んでおきます

----------------------------------------
Bug #7947: Queue#clear の返り値が Queue 内部の配列になっている
https://bugs.ruby-lang.org/issues/7947#change-36958

Author: clicube (Cubing Cube)
Status: Assigned
Priority: Normal
Assignee: kosaki (Motohiro KOSAKI)
Category: core
Target version: 2.1.0
ruby -v: ruby 2.0.0dev (2013-02-24 trunk 39476) [x86_64-darwin11.4.2]


■現象
Queue#clear
が
def clear
  @que.clear
end
と実装されていて, Array#clear は self を返すので,結果的に内部の配列 @que が返っています.

■問題と思われること
1.
内部で使っている変数にアクセスできてしまいます.
(これは instance_eval でアクセスしようと思えばできるわけですが)
2.
Array も Queue も #push や #pop があるため,
Queue#clear の返り値に対してメソッドチェーンで #push などを繋いだりすると,
エラーが起こらないにもかかわらず内部の変数を直接書き換えてしまう可能性があると考えます.

■パッチについて
今回はQueue#clearで気づきましたが,
QueueおよびSizedQueueのメソッドについて Array との対称性を考えると,
・Queue#push
・Queue#clear
・SizedQueue#push
・SizedQueue#clear
は self が返るべきかと考えました.
以上4メソッドについて変更を加えるパッチを添付します.

テストの実行結果は以下です.
$ ./ruby -I./lib -I. test/thread/test_queue.rb
Run options: 

# Running tests:

Finished tests in 1.680776s, 7.1396 tests/s, 13.6842 assertions/s.    
12 tests, 23 assertions, 0 failures, 0 errors, 0 skips

ruby -v: ruby 2.0.0dev (2013-02-24 trunk 39476) [x86_64-darwin11.4.2]

パッチのつくり方やテストの書き方/実行方法に自信がないのですが,これでいいのでしょうか.
IRCで相談に乗っていただいた方々,ありがとうございました.



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

In This Thread