SWFEditor 0.43 release - replaceActionStrings memory leak fix
0.43 をリリースしました。memory leak の修正対応です。
SWFEditor は-DMALLOC_DEBUG オプションを付けてコンパイルすると、memory leak を洗い出せます。そのテストで2つ問題を見つけ、修正しました。
問題1 (replaceShapeData)
swf_object_replace_shapedata: fallback to read old shape data XXX (6) ptr=0x99db138 (/home/yoya/git/swfed/src/swf_tag.c, 107)
- replaceShapeData の扱うデータ形式が 0.37 から 0.38 で変わったので、0.37 のデータも受理出来るように、fallback 処理を入れていますが、そこで free せずにポインタを上書きする処理がありました。
問題2 (replaceActionStrings)
XXX (204928) ptr=0xb40eb48 (/home/yoya/git/swfed/src/bitstream.c, 15) XXX (204929) ptr=0xb49af90 (/home/yoya/git/swfed/src/bitstream.c, 69)
実はこっちがより深刻で…
bitstream_open で確保する bitstream 管理データ(24byte+α)の free 忘れなので、全部の bitstream_open と close の関係を洗い直す作業*1をしたら、action tag detail build 処理に close し忘れを見つけました。
現状、この処理が動くのは rebuild と replaceActionStrings の2種類で、rebuild は基本デバッグや入稿処理とかで使われるとして、replaceActionStrings の方は頻繁に呼ぶ処理として使うはずなので、非常にマズイです。
これらのメソッドを呼んだ回数 x (24byte + α) の memory leak が(その後ろで output を呼んだタイミングで)発生します。
*1:bitstream_open の後、関数のあちこちにある return で確実に close してるのかをチェックするだけですが