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 してるのかをチェックするだけですが