コマンドライン引数の文字化け
Tera Term Menuのコマンドライン引数の文字数が、MAX_PATHで制限されているため、256文字を超えるコマンドライン引数部分が文字化けにより渡されない。 ホスト名、ユーザ名、パスワード等を保持する変数は、各々MAX_PATHサイズで変数をとっているが、最終的にszArgment変数にコピーしており、szArgmentも MAX_PATH文字しか取っていないため、バッファーオーバーフローを起こしていると思われる。ただし、別の処理でオーバーした分が上書きされていると思われる。 WindwosXP以降はコマンドラインバッファは8192文字まで対応しているので、szArgment変数は8192分を用意するべきであるし、サイズチェックをするべき。
8192 の根拠になるのはここ?https://learn.microsoft.com/ja-jp/troubleshoot/windows-client/shell-experience/command-line-string-limitation
修正必要箇所はまだ見ていないが、バッファを増やすだけなら容易?
で対応しました。
WindwosXP以降はコマンドラインバッファは8192文字まで対応しているので、szArgment変数は8192分を用意するべきであるし、
資料によると 8191 文字が上限のようなので、char szArgment[8192] に変更しました。
サイズチェックをするべき。
wsprintf() や _snprintf() を使っているところがあったので _s 付きの関数に変更しました。こういうご指摘だったという理解でいいでしょうか?
Tera Term Menuのコマンドライン引数の文字数が、MAX_PATHで制限されているため、256文字を超えるコマンドライン引数部分が文字化けにより渡されない。 ホスト名、ユーザ名、パスワード等を保持する変数は、各々MAX_PATHサイズで変数をとっているが、最終的にszArgment変数にコピーしており、szArgmentも MAX_PATH文字しか取っていないため、バッファーオーバーフローを起こしていると思われる。ただし、別の処理でオーバーした分が上書きされていると思われる。 WindwosXP以降はコマンドラインバッファは8192文字まで対応しているので、szArgment変数は8192分を用意するべきであるし、サイズチェックをするべき。