概要
タグジャンプ機能の CDlgTagJumpList::CopyDirDir において、バッファサイズを考慮せずに wcscpy/wcscat を使用しているため、特定の条件下でスタックバッファオーバーフローが発生する可能性があります。
詳細
CopyDirDir 関数は、元々バッファオーバーフローを考慮した実装になっていません。
そのため、!_TAG_S_SEARCH_NEXT ディレクティブを含む tags ファイルで長いパスが指定された場合、スタックバッファが破壊され、アプリケーションがクラッシュする恐れがあります。
再現手順
- 長大なパスを含む
!_TAG_S_SEARCH_NEXT ディレクティブを持つ tags ファイルを作成してプロジェクトディレクトリに配置
- Sakura Editor でそのプロジェクト内のファイルを開く
Ctrl+] でタグジャンプを実行
- クラッシュする
結論
バッファ長を考慮した安全な実装に変更することを検討して頂きたいです。
以前のコメントでご指摘いただいた方向を参考に、以下のような形(std::span<WCHAR> と _s 関数を使用)に変更することで、バッファ不足時に適切に動作させられるのではないかと考えています。
セキュリティ報告としてご連絡したところ「通常の issue であれば対応する」とのご返事をいただいたため、
こちらでissue として改めて報告させていただきます。
概要
タグジャンプ機能の
CDlgTagJumpList::CopyDirDirにおいて、バッファサイズを考慮せずにwcscpy/wcscatを使用しているため、特定の条件下でスタックバッファオーバーフローが発生する可能性があります。詳細
CopyDirDir関数は、元々バッファオーバーフローを考慮した実装になっていません。そのため、
!_TAG_S_SEARCH_NEXTディレクティブを含む tags ファイルで長いパスが指定された場合、スタックバッファが破壊され、アプリケーションがクラッシュする恐れがあります。再現手順
!_TAG_S_SEARCH_NEXTディレクティブを持つtagsファイルを作成してプロジェクトディレクトリに配置Ctrl+]でタグジャンプを実行結論
バッファ長を考慮した安全な実装に変更することを検討して頂きたいです。
以前のコメントでご指摘いただいた方向を参考に、以下のような形(
std::span<WCHAR>と_s関数を使用)に変更することで、バッファ不足時に適切に動作させられるのではないかと考えています。セキュリティ報告としてご連絡したところ「通常の issue であれば対応する」とのご返事をいただいたため、
こちらでissue として改めて報告させていただきます。