ifpic ver0.05 のバグ(たぶん)報告 (yllLiBe) 1999/11/10 08:40
ifpic.spi にバグがあると思われるので、報告します。
# 既に報告されていましたらすみません。

概要:
ifpic::GetPicture() から pHBInfo を通して返される BITMAPINFO 構造体の、
bmiHeader.biSizeImage の値がおかしい。
# おそらく正常値より +4 だけ大きい。
そのため、一部のアプリケーションが異常終了することがある。

経緯:
1. ある日、突然 NalWall(*1) が異常終了するようになった。

2. 調べてみると、どうやら pic ファイルを表示しようとした場合に、必ず異常終了
する模様。jpeg, png 等は正常に表示される。
# 以前は正常に動いていたので、環境の変化が影響を与えた可能性が大きいが、
# このとき既に症状が発生し始めてから随分時間が経っていたので、その方向の
# 原因の追求は断念した。

3. トレースして調べてみると、どうやら NalWall が使用している splay32.dll(*2)
の VBGetPicture() で異常終了している模様。
- splay32.dll を使用する他のプログラム Nagi(*3) でも同様に pic ファイルの
表示のみ異常終了する
- Susie プラグインを直接使用する他のソフトウェアでは pic ファイルを正常に
表示できる
このことから、splay32.dll に潜在的なバグがある可能性が考えられたので、
後藤あきら氏に報告した。
しかし、彼の環境では症状は再現せず、やはり環境に問題があるのではないか
との回答を頂いた。

4. 更にトレースして調べてみると、bmiHeader.biSizeImage が 0xnnnn04 のような
値になっており、これが原因でバッファオーバーランが起きて異常終了している
模様。
Tplay(*4) を用いて jpeg ファイルを開き biSizeImage の値をみると、きっかり
0xnnnn00 のような値になっていたため、0xnnnn04 のような値は何かおかしい
と思われる。

5. 更に ifpic.spi 内までトレースしてみると、以下のようなコードを発見。
ifpic.spi のバグだと確信。
023C4224 mov eax,dword ptr [ebp-4]
023C4227 mov word ptr [eax+0Eh],18h ; [eax+0eh](biBitCount) = 24;
023C422D mov eax,dword ptr [ebp-4]
023C4230 mov edx,dword ptr [edi+18h]
023C4233 mov dword ptr [eax+4],edx ; [eax+4](biWidth) = [edi+18h](width)
...
023C4259 mov eax,dword ptr [ebp-4]
023C425C movzx eax,word ptr [eax+0Eh] ; eax =? [eax+0eh](biBitCount);
023C4260 imul dword ptr [edi+18h] ; eax *= [edi+18h](width);
023C4263 add eax,1Fh ; eax += 31; (for (*1))
023C4266 test eax,eax ; if (eax >= 0) goto @f;
023C4268 jns @f
023C426A add eax,1Fh ; ???
@@: sar eax,5 ; eax /= 8; eax &= 0xfffffffc; (*1)
023C4270 shl eax,2
023C4273 imul dword ptr [edi+1Ch] ; eax *= [edi+1ch](height);
023C4276 add eax,4 ; eax += 4;
023C4279 mov edx,dword ptr [ebp-4]
023C427C mov dword ptr [edx+14h],eax ; [edx+14h](biSizeImage) = eax;

(*1) シェーン氏 作壁紙変更ソフトウェア http://www1.toride.com/~sys/
(*2) 後藤あきら氏作 VB から Susie プラグインを使用するためのライブラリ
http://www2.odn.ne.jp/foxlum/
(*3) 後藤あきら氏作 画像表示を目的とするソフトウェア
(*4) 後藤あきら氏作 splay32.dll テスト用プログラム

もしかしたら何か理由があって +4 を足しているのかも知れませんが、
それが原因で異常終了するアプリケーションもありますよということで。
参考になれば幸いです。
# バグだとしたら今まで報告がなかったのがちょっと不思議なくらいですが(^^;
# biWidth と biHeight を見てバッファサイズを決めてるのんが多いのかな。
# あ、pic ファイル自体が使われてないからか。



--「ifpic ver0.05 のバグ(たぶん)報告」に対するコメント--
タイトル(Subject):
お名前(Your name):
Mail address:
Password: :入力しておくとあとで削除できます
Your message:




7thBridge P ver0.26 (c)Takechin