問題内容
マクロ引数のうち文字列型を扱うものの一部で、ファイルパスなど内部仕様による制限が存在しているにもかかわらず、一切チェックされずバッファがコピーされたり強制終了したりする現状の動作を改善したいです。
再現手順
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文字を検索するには正規表現でのエスケープ処理が必要です。
必要があるのであれば、これらの処置の確認もしたほうがいいかもしれません。
問題内容
マクロ引数のうち文字列型を扱うものの一部で、ファイルパスなど内部仕様による制限が存在しているにもかかわらず、一切チェックされずバッファがコピーされたり強制終了したりする現状の動作を改善したいです。
再現手順
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文字を検索するには正規表現でのエスケープ処理が必要です。
必要があるのであれば、これらの処置の確認もしたほうがいいかもしれません。