CXX.FUNC.T2OLE.LOOP

ループ内で T2OLE または OLE2CT を呼び出さないでください。

T2OLE と OLE2CT マクロは alloca メソッドを使用しますが、ループ内で使用した場合、スタックオーバーフローが発生することがあります。

脆弱性とリスク

T2OLE と OLE2CT にはスタックメモリの割り当てが必要です (特に A2W での alloca メソッド)。これらのマクロをループで使用すると (特に文字列の長さに応じて)、スタックオーバーフローの可能性が高くなる場合があります。

軽減と防止

マクロを別の関数に配置し、マクロの代わりにループでその関数を呼び出します。次に、スタックに割り当てられたメモリは、関数が返すたびに解放されます。

コピー
for(int cnt = 0; cnt < 100000; cnt++)
 {
  T2OLE(sArea);
  ptr->PutStringProperty(T2OLE(_T("DATA10")));
}

消費されるスタックスペースは、各ループに割り当てられた合計の 100,000 倍です。これは、各文字列内のそれぞれの文字の wide char を合計したものです。