TODO

要望を頂いた項目は優先度が上がるかもしれません。

次回予定

優先度高め

  • エラーの整理 (なるべく PHP 側にエラーを出す、PHP 側で補足出来るエラーは debug モードに閉じ込める)

 (swfed-1.x とは並行して進める)

  • replaceActionStrings の文字列書き換え対象にボタンアクション内の文字列も追加。
  • setFrameRate((float) $rate);
  • setBackgroundColor($red, $green, $blue);
  • deformeShape($shape_id) メソッドの追加。
  • insertMovieClip($target, $frame_num, $name, $x, $y, $matrix = array())
  • insertTagData($seqno, $tagdata);

優先度低め or ライフワーク

  • JPEG replace 時に strip (不要なセグメント削除)
  • replacePNG の bpp=16 対応。(bpp=8 に落とすだけ)
  • DefineShape4 の parse に失敗する事のある不具合を修正する。(babyprincess top.swf で発見)
  • getFrameCountInfo(); の実装 => array('min' =>..., 'max'=>..., 'lcm'=>..., 'list'=>...)
  • getMovieClip の実装
  • replaceShapeColor($shape_id, $old_color, $new_color);
${old|new}_color = array('red' => ..., 'green' => ..., 'blue' => ...), );
  • setBackgroundColor($red, $green, $blue);
  • get(Jpeg|PNG|GIF)Data の premultiplied mode の指定
  • コードの整理 (swf_tag_remove(swf, tag), swf_tag_append(swf, prev, tag, next) にまとめる)
  • 標準エラーをなるべく PHP の警告へ移す。(debugモードを作る)
  • replaceActionVaribles(array(key => value, key2 => value2, ...)) の実装 < replaceActionStrings を作ったけど、思ったより使いにくかった。。。

怪しい

  • purgeUselessContents で音声にリンクしたボタンが機能しなくなる不具合を修正。(不具合報告は受けていませんが、DefineButtonSound の仕様を考慮していないので、対処が必要)

研究中

  • configure で gif, png 取りこめない場合の警告を分かり易くする (config.m4 で出来る?)
  • Windows の公式 PHP や WAMPP で使えるように。(PHP のソース毎 build するのは可能)
  • MP3 入れ替え。(DefineSound の nsampling の算出方法が分からない)
  • フォントの抽出/入れ替え (DefineFont)

懸念

trunk

新機能/変更

不具合修正

保留

  • replaceMovieClip で合成した SWF 同士で重複する depth をずらす処理を入れました。 < sprite 内で depth が正しければ OK のはずなのでボツ。

1.00

  • PHP8 に対応しました。thanks! > @withgod
  • www/ 以下 PHP サンプルの XSS 脆弱性を修正しました
  • macOS + homebrew でビルド出来なくなっていたので対処しました (ulong がないとか zilb が /usr/local/opt/zlib にしかないとか
  • libpng の都合で make test が通らなくなっていたので対応。テスト画像 PNG から iCCP を削除。

0.65

  • PHP7 に対応しました。thanks! > @withgod
  • chunk の間に(0xff以外の)ゴミがある JPEG でも replace 出来るようにしました。

0.64

0.63

0.62

  • 64bit機で seg.fault の起こる可能性があり、その対処リリースです。
    • 影響を受ける function は次の通りです。
getTagDada, replaceTagData,removeTag, printTagData, getShapeData, replaceShapeData, setShapeAdjustMode, getJpegAlpha, replacePNGData, replaceGIFData, getSoundData, replaceMovieClip, isShapeTagData, isBitmmapTagData.

0.61

* DoS 脆弱性の不具合対応です。64bit機で問題が発生する事が確認されています。

不具合

  • SWF の action record は仕様上 0 終端ですが、この 0終端が無い場合に、正しく処理出来ません。以下の3パターンの障害を確認しています。
    • 32bit機: 該当の action tag が無いものとして動作する。
    • 64bit機: (apache) max execution time までループします。
    • 64bit機: (cli) メモリを食いつぶして止まるか、seg.faiult で落ちます。

0.60

  • replaceBitmapData や replacePNGData の第二引数に透明度付きパレット形式PNGを渡した際、その画像サイズが大きすぎる等して作業バッファが作成できなかった時に、メモリがリークする不具合を修正しました。

0.59

  • setShapeAdjustMode で SWFEditor::SHAPE_BITMAP_MATRIX_RESCALE を指定して画像を入れ替えた際に、素材SWFの構造によっては "swf_tag_shape_apply_matrix_factor: unknown fill_style->type=0" の文字列が標準エラー出力(apache だと error.log)される不具合を修正しました。
  • www/index.php の解析ツールの投稿ファイル上限に upload_max_filesize が反映されていなかった不具合を修正しました。

0.58

  • setShapeAdjustMode で SWFEditor::SHAPE_BITMAP_MATRIX_RESCALE, SWFEditor::SHAPE_BITMAP_TYPE_TILLED を指定して画像を入れ替えた際に、別の画像も影響を受ける事がある不具合を修正しました。SWF 的には1つの DefineShape から複数の DefineBis 系タグを参照している場合に問題が発生します。
  • 動的テキスト(DefineEditText)でフォントを指定した SWF を replaceMovieClip に渡した場合に、文字が意図しないフォントで表示される不具合を修正しました。

0.57

以下の条件で発生する可能性のある seg.fault の不具合修正です。

  • グラフィックシンボルで10個以上の画像をまとめた(画像のみを普通のシンボルでまとめた場合も同様)SWF に以下の操作を行った場合。
    • setShapeAdjustMode で NONE 以外を指定した後で、replace*Data(画像系全て)を実行した場合。
    • 画像を10個持つグラフィックシンボル(Shape Tag) に対して getTagDetail を実行した場合。
  • ボタンシンボルで10個以上の画像をまとめた SWF に対して、purgeUselessContents を実行した場合。

Windows での build の対応もあります。

  • Windows でコンパイルが出来なくなっていたのを修正しました。
  • Windows GIF 系のメソッドを呼ぶとプロセスが異常終了する不具合を修正しました。> http://d.hatena.ne.jp/yoya/20120404/swfed

0.56

* 雛形 SWF にα値が0(完全透明)のピクセルを持つ画像を含まれる場合、replaceBitmapData で色指定で画像を入れ替えた時に、プロセスが異常終了する事のある不具合を修正しました。

0.55

  • 1つの SWFEditor オブジェクトに対して replaceMovieClip を複数回呼ぶと seg.fault する事のある不具合を修正しました。
  • 途中で途切れた SWF を渡すと swf.fault する事のある不具合を修正しました。

0.54

  • メモリリークを修正しました。(0.52 でのエンバグで、ボタンに ActionScript が割り当てられるとリークする事があります)
  • CharacterId (image_id や sprite_id 等)に NULL を渡した時に、PHP の警告(Warning)が出るようにしました。
  • 稀なケースですが、bitstream の警告エラーが表示される可能性のある不具合を修正しました。

0.53

  • php-5.3.10 でコンパイル出来ない不具合を修正しました。
  • replacePNGData が動かない不具合を修正しました。
  • ボタンがある時に purgeUselessContents と swfInfo メソッドで失敗する不具合を修正しました。

いずれも致命的な不具合の為、swfed-0.52 は欠番とします。 すみません。すみません。すみません。

0.52 (NG)

新機能

  • replacePNGData と replaceBitmapData に rgb15 オプションを追加しました。PNG24 を渡した場合、R,B,G を各々 5bit で保存する事で画像サイズを減らします。減色と組み合わせてお使い下さい。

不具合修正

  • purgeUselessContents で画像を割り当てたボタンが機能しなくなる不具合を修正しました。 (ボタンが参照する画像を誤って削ってしまい、画像が表示出来なくなり、かつ、ボタンが反応しなくなっていました)

0.51

  • getPNGData, convertBitmapDataToJpegTag にて、パレット形式(format=3)の Lossless 画像から透明度情報が抜け落ちた PNG が生成される不具合を修正しました。
    • この不具合では透明のはずの場所が黒く表示されます。

0.50

  • convertBitmapDataToJpegTag を実装しました
    • SWF 内の Lossless 画像を PNG に変換して DefineBitsJPEG2 として格納し直します。
  • getEditString の不具合修正
    • initial_text が入っていない時に seg.fault 発生
    • variable_name が先頭部分文字列一致で取得出来てしまう (本来は完全文字列一致)
  • replaceGifData (又は replaceBitmapData で GIF 画像を渡した時)
    • setAdjustMode を指定してこれらの関数を使った時に、意図しない動きをする不具合を修正しました。

不具合

  • palette 形式の Lossless を PNG に変換すると透明度の情報が抜け落ちます。 (0.51 で修正しました)

0.49

  • replaceBitmapData の機能拡張
    • 第四引数に (boolean) $without_converting を追加しました。これを true にすると (SWFv8 以降の仕様に則り) PNG/GIF/JPEG を変換せずに DefineBitsJPEG2 に格納します。
    • (携帯の Flash Player では表示できないので、特殊な場合以外使わないで下さい)

0.48

  • input をしない、または失敗した後に、setActionVariables を実行すると Seg.fault する不具合を修正しました。
  • libpng 1.40 対応。png_check_sig が削除されたので png_sig_cmp を使うようにしました。

0.47

  • setActionVariables, replaceActionStrings に文字列以外の型の値を渡すと、Seg.fault する不具合を修正しました。
  • Windows SDK でコンパイル出来るようにしました。参考) http://d.hatena.ne.jp/yoya/20110810/swfed
  • ビット処理を幾分か高速化しました。
  • www/~ の解析ツールでベクター画像一覧が MacOSX で表示できなかった問題を修正しました。

0.46

  • replaceJpegData に渡す JPEG データの EOI の後に表示と無関係なデータが続く場合に処理を諦める不具合を修正しました。(偽装ツール等で変換した JPEG 等が相当します)
    • SWF の JPEG 処理で SOS,RST の後ろは並び替えが不要なので、SOS,RST と EOI はひとかたまりで処理します。
    • 但し、データの最後が EOI でない場合は、今まで通り EOI まで走査して、その後ろに不正なデータがある場合は無い物として処理します。
  • getPNGData で取得した画像に不適当なガンマ値がつく問題を修正。
    • getPNGData で取得した画像が本来より明るいor(稀に)位画像に変わる事がありました。
  • 処理の高速化
    • JPEG 変換と CID 取得処理を改造。bitstream もわずかに改善

0.45

  • replaceTagContentsByCID の後、高確率で sef.fault が発生する不具合を修正しました。

0.44

  • replaceActionStrings で 1つの Push 命令で複数の値を扱うバイトコードに対応しました。> yoshikids さん thx!
  • configure で libpng と giflib を必須にしました。(今までオプション扱いでした)
    • configure で giflib, libpng が見つからない場合にエラー停止します。(今までは警告のみ)

0.43

memory leak 修正対応のリリースです。

  • replaceActionStrings や (DoAction タグがある時に) rebuild を呼ぶと (output 時に) memory leak する不具合を修正しました。
  • DoAction タグのバイナリ再構築で free 抜けがあった為です。上記メソッドを読んだ回数 × (24 byte + malloc の管理領域 + 構造体の隙間) 分 leak します。
  • replaceShapeData の引数で(0.37 以前の形式を含め) 0.38 以降の正しい Shapeデータ形式以外を渡すと memory leak する不具合を修正しました。

0.42

  • replaceBitmapData を実装しました。
  • 画像 replace 系メソッドの高機能版です。(1)JPEG/PNG/GIF いずれを渡しても大丈夫です。(2) サイズや色の組み合わせの条件で入れ替える画像を指定出来ます。
例1) $condition = array('width' => ..., 'height' => ...); 例2) $condition = array('red' => ..., 'green' => ..., 'blue' => ...);

0.41

  • replaceActionString (ActionScript 中の文字列を入れ替える)
    • ActionScript2.0 の文字列(変数名やリテラル等)を書き換えます。
    • (ラベルは未対応です。要望があれば対応します)

0.40

新機能

  • www の dump ツールにビットマップ画像のみ表示するモードを追加しました。

不具合修正

  • replaceMovieClip で合成した2つの SWF の CID が合わせて 256 個以上の時に、正しく表示できない不具合を修正しました。
  • www の dump ツールのアップロードのファイルサイズ制限に ini の設定を反映させました。(今までは決め打ち表示なので正しくないです)

0.39

  • getShapeData, getTagData でメモリリークする問題を修正しました。
  • printTagData($tagdata) メソッドを実装しました。
  • 小さいサイズに realloc して先頭ポインタが変わる場合に対応出来ていない不具合に対処しました。(稀ですが seg.fault の可能性がありました)

0.38

  • getShapeData/replaceShapeData で扱うデータ形式を 0.37 までと 0.38 以降で変更しました。以前の shape データは使えませんので、ご注意下さい。
  • replaceMovieClip でビットマップを張り付けたモーフィング画像を渡すと、表示がおかしくなる不具合を修正しました。
  • removeTag($seqno) を実装しました。 (デバッグや解析用に便利です)
  • replaceShapeData で入れ替え元と後の tag code が異なると正しく動作しない不具合を修正しました。(0.37 以前で get で取得した shape データは replace で利用しないで下さい)
  • rebuild メソッドが実質機能していなかったのを修正しました。
  • 同じオブジェクトで input を複数回呼ぶとメモリリークする不具合を修正しました。

不具合

  • getShapeData, getTagData を使う度にメモリリークします。0.39 で修正します。

0.37

  • replaceMovieClip インスタンス名指定のターゲットパス形式対応。0.36 では A/B のシンボルを B 指定で入れ替えられましたが、0.37 からは A/B 形式で指定して下さい。
  • getTagDataByCID($cid) replaceTagDataByCID($cid, $tagdata), を実装しました。 (replaceShapeData の代わりに使って下さい)
  • isShapeTagData($tagdata), isBitmapTagData($tagdata) メソッドを実装しました。
  • rebuild メソッドを実装しました。データ編集の有無に関わらずバイナリを再構築します。(サイズがわずかに増減する事があります。処理は重た目です)
  • replaceTagData は tag_code&length フィールドを含む形式を受け付けるようにしました。(getTagData が返すデータ形式に合わせる為)
  • swfInfo で表示するベクター画像の曲線座標の誤りを修正しました。

0.36

  • replaceMovieClip から unused_cid_purge の機能を削除しました。 > purgeUselessContents メソッドが代わりになります。
  • purgeUselessContents の実装 (unused_cid_purge フラグの代わりで、かつこのフラグに合った制限事項は解消してます)
  • replaceMovieClip でシンボル内のインスタンス名指定で入れ替え出来るようにしました。
  • replaceMovieClip で version8 移行のベクター画像データ(DefineShape4, DefineMorphShape2)がある場合に壊れた SWF が生成される不具合を修正しました。
  • 複数の画像をグループ化したグラフィックシンボルがある場合の不具合に対応しました。

0.35

  • replaceMovieClip で上書きするシンボルから参照されるデータを削除するようにしました。引数指定で削除しない指示も可能です。
  • setCompressLevel メソッドを追加しました。(主に、PNG/GIF 入れ替えの圧縮率に影響します)
  • (get|set)HeaderInfo を拡張しました。FrameRect に対応しました。(x_min, y_min, x_max, y_max をキーに指定します)

0.34

機能

  • replaceMovieClip で上書きするシンボルから参照されるデータを削除するようにしました。
  • replaceMovieClip で合成した swf 同士で depth が重複させない処理を無効化しました。(意味が無いので)

不具合修正

  • replaceMovieClip で上書きするシンボルから参照されるデータを削除する処理が機能していませんでした。
  • replaceMovieClip の合成結果に JPEGTables が2つ入る事のある不具合を修正しました。
  • replaceMovieClip の第2引数にシンボルを含むSWFデータを渡した時に表示がおかしくなる不具合を修正しました。
  • setShapeAdjustMode で SHAPE_BITMAP_MATRIX_RESCALE が機能しなくなっていた不具合を修正しました。 (0.32 でデグレード)
  • zlib compress でサイズが増える場合に対応しました。(*1.001+12 byte のマージンを追加)

不具合

  • この機能が動いていませんでした → replaceMovieClip で上書きするシンボルから参照されるデータを削除するようにしました。

0.33

0.32 同様実験リリースです。安定版はもう少しお待ち下さい。
  • replaceMovieClip で合成した SWF 同士で重複する CID をずらす処理について、MovieClip が nest した場合にも対応しました。
  • replaceMovieClip で合成した SWF 同士で重複する depth をずらす処理を入れました。(実験的に入れています、必要なければ削除)
  • 0.32 で getShapeIdListByBitmapRef が機能しなくなっていたので修正しました。(undefined symbol: swf_tag_shape_bitmap_get_cid の警告が出ます)
  • applyShapeRectFactor, applyShapeMatrixFactor で移動距離が1/20で動作する不具合を修正しました。
  • replaceTagData で seg.fault する事がある不具合を修正しました。
  • 形式のおかしい tag を処理する際に seg.fault する事がある不具合を修正しました。

0.32

今回、大量にコードを書き換えた為、品質的に不安があります。 replaceMovieClip を試す目的以外では 0.31 以前をお使い下さい。
  • replaceMovieClip を実装しました。(実験レベルです)
  • setActionVariables を呼びすぎると ActionScript が動かなくなる問題を修正しました。

0.31

  • Web(swfed/www)で表示する画像一覧に SHAPE の画像を追加。(bitmap を張る shape は未対応)
  • getTagDetail, swfInfo, replaceShapeData の何れかを呼んだ後で getShapeData を呼ぶと正しくないデータが取れるのを修正。

0.30

  • 透明色を含まない GIF89a を replaceGIFData に渡した場合に、colortable 256個目の色が透明になる不具合を修正しました。

0.29

( php -i で 0.28 と表示されます。済みません…)
  • getShapeData, replaceShapeData を実装しました。
  • getTagContentsByCID, replaceTagContentsByCID を実装しました。
  • 詳細はこちらをご覧ください。↓

http://d.hatena.ne.jp/yoya/20110203/swfed

0.28

  • 稀に Seg.fault で落ちる不具合を修正。(環境によっては高い確率で落ちる)
    • JPEG タグを含む SWF を入れ替えたり dump したりする処理で、意図しない free が動いていた。

0.27

  • 0.26 の不具合修正リリース

0.26 (NG)

(不具合が含まれます。0.27 以降をお使いください)
  • setActionVariables($params) : ActionScript変数を初期化する機能
  • replacePNGData に透明度付きPNGを渡した際に、意図しない色が透明になる事がある不具合を修正。
    • tRNS から透明度情報を読む際に、1つ大目にカン違いしていて余計に1色分透明にしていました。

0.25

  • replaceJpegData に GIF を渡すとPHPごと落ちる事がある不具合を

0.24

  • getShapeIdListByBitmapRef($image_id) : image_id を指す Shapeタグ一覧取得
  • getBitmapSize($image_id) : image_id に対応する画像の縦横サイズを得る
  • replacePNGdata で JPEGタグの image_id を指定した時にたまにPHPごと落ちる不具合の修正

その他

  • php -i で SWF Editor のバージョンを確認できるようにしました。(今までなくて済みません)

詳細はこちらをご覧ください。↓

0.23

  • サイズの異なる画像で入れ替えた場合に枠に合わない問題に、(JPEG に加えて) GIF, PNG にも対応しました。
  • replaceJPEGData, replaceGIFData, replacePNGdata の3つで有効な、setShapeAdjustMode メソッドを実装しました。

使い方は、0.22 の(JPEG のみ有効だった)adjustShapeBitmap と同じです。

尚、adjustShapeBitmap メソッドは削除しました。(名前が分かりにくいので、setShapeAdjustMode に変更)

詳細はこちらをご覧ください。↓

0.22 (NG)

(adjustShapeBitmap は setShapeAdjustMode に改名しました。0.23 以降をお使い下さい)

サイズの異なる画像で入れ替えた場合に 枠と合わず表示が変になる問題への対応です。

  • applyShapeRectFactor がまともに動作するようになりました
  • applyShapeMatrixFactor のメモリリークを修正しました。

adjustShapeBitmap を実装しました。(replaceJPEGData のみ対応)

  • 以下の3つの選択肢があります。
  • SWFEditor::SHAPE_BITMAP_RECT_RESIZE
  • SWFEditor::SHAPE_BITMAP_MATRIX_RESCALE
  • SWFEditor::SHAPE_BITMAP_TYPE_TILLED

詳細はこちらをご覧ください。↓

0.21

新機能

  • applyShapeMatrixFactor メソッドを追加しました。
  • 画像の(枠内)スケール/回転/移動のツールです。
  • applyShapeRectFactor メソッドを追加しました (こちらはまだ実験的な機能です)
  • 画像の枠のスケール/移動のツールです

不具合修正

  • bpp = 8 未満の GIF で入れ替えができない不具合を修正しました。
  • スレッドセーフを要求する環境でコンパイル出来ない問題を修正しました

その他

  • swfInfo の表示を色々改良
  • swfInfo に DefineShape1,2,3 DefineMorphShape の詳細表示を追加
  • Lossless の処理を少し高速化 (恐らく効果は誤差範囲ですが…)

0.20

* method 名が global function としても見える不具合を修正しました。

0.19

  • getEditString で正しい長さの文字列を取得できない問題を修正しました (変数名より長い文字列だと途中で切れていました)
  • libpng, giflib がリンクできない事のある不具合を対処しました
  • getTagData を実装しました
  • swfInfo で DefineSprite の中身を表示させました
  • print 表示の細かい変更を行いました (TWIPS からpixel に単位変更等)
  • エラーメッセージを幾つか改良しました

0.18

0.17

0.16

0.15

0.14

0.13

0.12

0.11

0.10

0.09

0.08

  • replacePNGData で 256 full に使った palette 画像で一色変わる不具合を修正。

0.07

  • replaceMLDData 実装。

0.06

  • getSoundData 実装。

0.05

0.04

  • Lossless format=3 PNG 吸い出しのメモリリーク修正

0.03

  • Lossless format=3 を PNGとして吸い出す機能対応

0.02

  • Lossless format=5 を PNGとして吸い出す機能対応

0.01

  • sourceforge.jp での initial release

2008/07/23

=2008/07/22 =

2008/06/03

2008/05/14

2008/04/13

2008/04/11

2008/04/07

2008/04/02

2008/04/01

2008/03/31