Ticket #41024

2.10.14でrubyextがdouble freeする

Open Date: 2020-12-04 15:32 Last Update: 2023-01-02 00:15

Reporter:
Owner:
Type:
Status:
Closed
Component:
(None)
MileStone:
(None)
Priority:
7
Severity:
5 - Medium
Resolution:
Fixed
File:
2

Details

skf 2.10.14 で rubyextが、次のような simple なテストケースで double free を起こします。2.10.12では発生しません。

ruby-mri -I. -e 'require "skf" ; Skf.convert("-s", [164, 162].pack("C*"))'

パッチにも書きましたが、 2.10.12 -> 2.10.14 で、skf_convert.i の中の convert() で、local変数の lwlstr を return 時に free するよう変更がなされています。 一方 rubyext の場合、同じ関数の入力の cstr は(以前から) return 時に free するようになっていますが、 rubyext の場合、lwlstr が cstr を指している為、 double free が発生します。 他方、他の extension の場合は、 lwlstr は新たに allocate された領域に、 cstr を元に作成します。

ソースを見る限り、 rubyext においては lwlstr は cstr を複製する方が正しい、と考えています。

Ticket History (3/6 Histories)

2020-12-04 15:32 Updated by: mtasaka
  • New Ticket "2.10.14でrubyextがdouble freeする" created
2020-12-09 00:03 Updated by: efialtes
  • Owner Update from (None) to efialtes
  • Priority Update from 5 - Medium to 7
2022-11-16 00:50 Updated by: efialtes
  • Resolution Update from None to Fixed
Comment

とりあえず修正しました。ただし、ruby 機能拡張は ruby 側の API 削除の関係で諦めたため、あまり意味がないかも。

2023-01-02 00:15 Updated by: efialtes
  • Status Update from Open to Closed

Attachment File List

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login