GSFinderのバグ検証(2)
えーと、見つけました。ポインタの初期化ミス。
バグ検証(1)で見つけたメモリ確保部分はCreateAppList2()という関数での処理なんですが……まあ、数字が付いてることから判るとおり、もう1つ、ほとんど同じ内容でポインタの初期化に失敗しているCreateAppList()という関数がありました。
CreateAppList2()のメモリ確保のコードはこうなっているのですが
//4.アプリケーションパス lpList->lpszAppPath = new TCHAR[wcslen(szAppPath)+1]; wcscpy(lpList->lpszAppPath, szAppPath); //5.コマンドライン lpList->lpszCommand = new TCHAR[wcslen(szCommand)+1]; wcscpy(lpList->lpszCommand, szCommand); //6.アイコン lpList->lpszIconPath = new TCHAR[wcslen(szIconPath)+1]; lpList->nIconID = nIconID; //7.イメージリストインデックス lpList->nImageIndex = 0;
CreateAppList()ではこうなっていました。
//4.アプリケーションパス lpList->lpszAppPath = new TCHAR[wcslen(szAppPath)+1]; wcscpy(lpList->lpszAppPath, szAppPath); //5.コマンドライン lpList->lpszCommand = new TCHAR[wcslen(szCommand)+1]; wcscpy(lpList->lpszCommand, szCommand); //6.イメージリストインデックス lpList->nImageIndex = 0;
こんなのぱっと見で見分けつきません(泣)。
おまけにCreateAppList2()のほうをよくよく見直せば、lpList->lpszIconPathはメモリ確保だけしていて、中身にデータをコピーしてないし、さらによく見れば、長さの計算に使ってるszIconPathの中身が初期化されていないっぽいし……。
とりあえずバグは修正できましたが、これは、時間を見つけてしっかりチェックしないといけないみたいですね。orz