Skip to content

CopyDirDir関数でのバッファ長を考慮しない文字列連結の改善 #2500

Description

@uaaw

概要

タグジャンプ機能の CDlgTagJumpList::CopyDirDir において、バッファサイズを考慮せずに wcscpy/wcscat を使用しているため、特定の条件下でスタックバッファオーバーフローが発生する可能性があります。

詳細

CopyDirDir 関数は、元々バッファオーバーフローを考慮した実装になっていません。
そのため、!_TAG_S_SEARCH_NEXT ディレクティブを含む tags ファイルで長いパスが指定された場合、スタックバッファが破壊され、アプリケーションがクラッシュする恐れがあります。

再現手順

  1. 長大なパスを含む !_TAG_S_SEARCH_NEXT ディレクティブを持つ tags ファイルを作成してプロジェクトディレクトリに配置
  2. Sakura Editor でそのプロジェクト内のファイルを開く
  3. Ctrl+] でタグジャンプを実行
  4. クラッシュする

結論

バッファ長を考慮した安全な実装に変更することを検討して頂きたいです。

以前のコメントでご指摘いただいた方向を参考に、以下のような形(std::span<WCHAR>_s 関数を使用)に変更することで、バッファ不足時に適切に動作させられるのではないかと考えています。

セキュリティ報告としてご連絡したところ「通常の issue であれば対応する」とのご返事をいただいたため、
こちらでissue として改めて報告させていただきます。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions