任务单 #41024

2.10.14でrubyextがdouble freeする

开放日期: 2020-12-04 15:32 最后更新: 2022-11-16 00:50

报告人:
属主:
类型:
状态:
开启 [Owner assigned]
组件:
(无)
里程碑:
(无)
优先:
7
严重性:
5 - Medium
处理结果:
Fixed
文件:
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 を複製する方が正しい、と考えています。

任务单历史 (3/5 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
  • 优先 Update from 5 - Medium to 7
  • 属主 Update from (无) to efialtes
2022-11-16 00:50 Updated by: efialtes
  • 处理结果 Update from to Fixed
评论

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

Attachment File List

编辑

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