-
Notifications
You must be signed in to change notification settings - Fork 165
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
マクロの文字列型引数における文字列長が未チェックのものがあるのを修正したい #1825
Comments
文字列を引数に取る関数 対策が必要なさそうな関数の一覧暫定版 |
大変難しい話題なので放置していました。 「問題内容」に対して「ん?」と思った点が3つありました。
意図的に放置していたわけですが、3週間誰も反応してないことが対応の難しさを物語っている気がします。 |
問題内容
マクロ引数のうち文字列型を扱うものの一部で、ファイルパスなど内部仕様による制限が存在しているにもかかわらず、一切チェックされずバッファがコピーされたり強制終了したりする現状の動作を改善したいです。
再現手順
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文字を検索するには正規表現でのエスケープ処理が必要です。
必要があるのであれば、これらの処置の確認もしたほうがいいかもしれません。
The text was updated successfully, but these errors were encountered: