Skip to content

マクロの文字列型引数における文字列長が未チェックのものがあるのを修正したい #1825

@usagisita

Description

@usagisita

問題内容

マクロ引数のうち文字列型を扱うものの一部で、ファイルパスなど内部仕様による制限が存在しているにもかかわらず、一切チェックされずバッファがコピーされたり強制終了したりする現状の動作を改善したいです。

再現手順

Editor.FileSaveAs("<260文字を超えるような長い文字列>")

などのマクロを実行します。

またExtHtmlHelpを悪用することで設定によってはwcscpyのバッファオーバーランによりメモリー上の共有データ構造体を破壊することができます。

なおInsText、InsBoxText、AddTailなどで巨大な文字列を指定しメモリー上限に達してクラッシュするようなタイプはこのIssueの考慮対象外としたいです。

再現頻度

いつも

問題のカテゴリ

  • 仕様の問題
  • プログラムの動作上の問題
    • 正式リリース版

その他

参考情報として、FileSaveAsマクロ等でのファイル名に関して、CON、PRN、NUL、AUX、COM1などの特殊ファイル名を指定すると、保存処理の段階でクラッシュしたり応答なしになったりすることもありますが、これも今回のIssueの範囲外としたいです。
対応を考えるのであれば、またIssueなどを作成するなりコメントなどをお願いします。

マクロの文字列長には「\0(NUL)までの長さ(wcslen、lstrlen)」と「文字列全体の長さ==BSTRの長さ」が存在しています。
処理の仕方によっては、この2つの混同により現状では正しく処理されていないケースもあるかもしれません。
例えばInsText、InsBoxTextなどでは文字列の途中にNULが含まれるケースが想定されておりBSTRの長さが使わています。
一方、SearchNext、Replaceなど検索系ではNULまでの長さが使われているようです。NUL文字を検索するには正規表現でのエスケープ処理が必要です。
必要があるのであれば、これらの処置の確認もしたほうがいいかもしれません。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions