チケット #10405

TTPMACRO が起動時に異常終了する
登録: 2007-05-17 18:32 最終更新: 2007-05-25 19:21

報告者:
(匿名)
担当者:
(未割り当て)
チケットの種類:
状況:
完了
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
なし
投票
点数: 0
No votes
0.0% (0/0)
0.0% (0/0)

詳細

TeraTerm Macro(TTPMACRO)を以下のような長いパスで実行
したところ、TeraTerm Macro の画面が表示される前に異常終
了しました。

=== test.bat ====================
REM 正常終了
"C:\Program Files\teraterm\ttpmacro.exe" "D:\My
Programs\作業ツール\GetInfoMacro\1.00.00\さらに長いパス
でテストしてみたところ\情報取得\test.ttl" "D:\My
Programs\作業ツール\GetInfoMacro\1.00.00\さらに長いパス
でテストしてみたところ\情報取得\test.txt" "D:\"

REM 正常終了
"C:\Program Files\teraterm\ttpmacro.exe" "D:\My
Programs\作業ツール\GetInfoMacro\1.00.00\さらに長いパス
でテストしてみたところ\情報取得
\test.ttl" "D:\test.txt" "D:\My Programs\作業ツール
\GetInfoMacro\1.00.00\さらに長いパスでテストしてみたと
ころ\情報取得\"

REM 正常終了
"C:\Program
Files\teraterm\ttpmacro.exe" "D:\test.ttl" "D:\My
Programs\作業ツール\GetInfoMacro\1.00.00\さらに長いパス
でテストしてみたところ\情報取得\test.txt" "D:\My
Programs\作業ツール\GetInfoMacro\1.00.00\さらに長いパス
でテストしてみたところ\情報取得\"

REM エラーで終了
"C:\Program Files\teraterm\ttpmacro.exe" "D:\My
Programs\作業ツール\GetInfoMacro\1.00.00\さらに長いパス
でテストしてみたところ\情報取得\test.ttl" "D:\My
Programs\作業ツール\GetInfoMacro\1.00.00\さらに長いパス
でテストしてみたところ\情報取得\test.txt" "D:\My
Programs\作業ツール\GetInfoMacro\1.00.00\さらに長いパス
でテストしてみたところ\情報取得\"

PAUSE
==============================
test.ttl と test.txt は空ファイルでテスト。

以上よろしくお願いします。

チケットの履歴 (4 件中 3 件表示)

2007-05-17 19:45 更新者: yutakapon
コメント
Logged In: YES
user_id=24082

TO: 開発チームメンバ

これはマクロにBOFのバグがあるためのようです。
ParseParam()#ttmdlg.cppの箇所です。Param[]もTemp[]も256まで
しか取っていないので、これでは足りません。

#ifdef TERATERM32
strcpy(Param,GetCommandLine()); ★
i = 0;
// the first term shuld be executable filename of TTMACRO
NextParam(Param, &i, Temp, sizeof(Temp));
#else

完璧にするなら、以下のように自前でやるか、__argc, __argv(@
stdlib.h)を使う、でしょうか...
http://techtips.belution.com/ja/vc/0084/

TeraTermの内部ではあちこちで 256 文字までときめうちしている
ので、256文字以上渡されたら、エラーにするのもアリかと思います。
2007-05-17 22:20 更新者: maya
コメント
Logged In: YES
user_id=1144

ttermpro のコマンドラインも同じですね。

マクロの文字列変数処理にも同じような問題があります。
a = '1000文字くらい'
messagebox a 'error'
とすると、代入ができます。# この時点で異常
そして、それを使おうとしたときに落ちます。
代入の段階で、切り捨てるかエラーにするのがよいと思います。
Integer は振り切ってマイナスに行くので、落ちたりはしません。
2007-05-18 09:20 更新者: yutakapon
コメント
Logged In: YES
user_id=24082

バッファの扱いは全般に机上チェックしたほうがよさそうですね。
TTSSHのTTXSetCommandLine()は 1024 文字までOKそうです。

とりあえず、マクロのParseParam()の箇所は直しておきたいところ
ですが、そもそもここは Param[] という配列を使う必要はないよ
うに見えるので、GetCommandLine()のポインタをそのまま使えば、
256文字以上のフルパス指定があっても大丈夫そうです。

2007-05-25 19:21 更新者: yutakapon
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2007-05-25 19:21 に更新されました

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする