Tíquete #41024

2.10.14でrubyextがdouble freeする

: 2020-12-04 15:32 Última Atualização: 2023-01-02 00:15

Relator:
Dono:
Tipo:
Estado:
Fechado
Componente:
(Nenhum)
Marcos:
(Nenhum)
Prioridade:
7
Gravidade:
5 - Medium
Resolução:
Fixed
Arquivo:
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
  • Dono Update from (Nenhum) to efialtes
  • Prioridade Update from 5 - Medium to 7
2022-11-16 00:50 Updated by: efialtes
  • Resolução Update from Nenhum to Fixed
Comentário

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

2023-01-02 00:15 Updated by: efialtes
  • Estado Update from Aberto to Fechado

Attachment File List

Editar

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