Ticket #48167

マクロ getpassword で Esc キーを押下したときの挙動がおかしい

오픈 날짜: 2023-06-06 12:12 마지막 업데이트: 2023-07-02 22:02

Reporter:
소유자:
Type:
Status:
Closed
Component:
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Details

Tera Term Ver.4.106 (SVN# 9298) を使用しています。
マクロの getpassword でダイアログが表示された場合の挙動に問題があるようです。

getpassword でダイアログが表示されたときに Esc キーでダイアログを閉じることができます。 このとき、第3引数で指定した変数の内容が変化しますが、内容が不定なようです。 画面で指定した文字列が入るわけではないようです。空白が1文字入る場合もありますし、文字化けしたような文字列が格納される場合もあります。 想像ですが、Esc キーでダイアログが閉じられてパスワード入力のコントロールが消滅した後に、ダイアログ内の文字列を取得しているのではないでしょうか。 そして、そのままパスワードファイルに書き込んでいるのではないでしょうか。

Esc キーでダイアログを閉じたときは、第3引数で指定した変数の内容は変更しないほうがよいと思います。パスワードファイルにも書き込まないほうが良いと思います。

以下、試した時のマクロ内容です。

  1. pwFile = 'C:\temp\password.dat'
  2. :retry
  3. delpassword pwFile 'test'
  4. password = ''
  5. getpassword pwFile 'test' password
  6. gpRes = result
  7. strcompare password 'end'
  8. if result = 0 end
  9. sprintf2 msg 'result = [%d]\npassword = [%s]' gpRes password
  10. strspecial msg
  11. messagebox msg 'TEST'
  12. goto retry

Ticket History (3/7 Histories)

2023-06-06 12:12 Updated by: imabeppu
  • New Ticket "マクロ getpassword で Esc キーを押下したときの挙動がおかしい" created
2023-06-06 14:16 Updated by: nmaya
  • 소유자 Update from (None) to nmaya
  • Resolution Update from None to Accepted
  • Milestone Update from (None) to Tera Term 4.107 & 5.0
2023-06-07 01:26 Updated by: nmaya
  • Resolution Update from Accepted to Fixed
댓글 올리기

対応しました。

2023-06-26 10:45 Updated by: imabeppu
댓글 올리기

修正内容を見ました。

コンパイルオプションまで確認していませんので、実際は問題ないかもしれませんが、気になる点がありました。 以下のようなことは起きないでしょうか。


※ttl_gui.cpp (リビジョン 10743 を確認)

  • 220行目で input_string を宣言。初期化を行っていないので内容は不定。
  • 222行目で OpenInpDlg() を呼び出し。第1引数に input_string を渡す。
  • パスワード入力ダイアログ Esc キーを押下した場合、CInpDlg::OnOK() は呼び出されないので input_string の内容は変更なし。不定のまま。
  • 223行目で内容が不定な input_stringWideCharToUTF8() で変換。
  • 224行目で「if (Temp2[0]!=0)」という判定を行っているが、内容が不定なので Esc キー押下時も条件が成り立つ可能性がある。

できれば、OpenInpDlg() の戻り値で Esc キーを押下したかどうかが判断できるようにし、その値をもとに処理を切り分けたほうがよいと思います。

変更を最小限にするのならば、220行目で input_string を宣言するときに、初期化しておくことでも解決すると思います。

  1. wchar_t input_string[MaxStrLen] = {};

以上、ご確認ください。

(Edited, 2023-06-27 12:45 Updated by: imabeppu)
2023-06-27 23:22 Updated by: nmaya
댓글 올리기

ありがとうございます。対応してみました。

2023-06-28 10:32 Updated by: imabeppu
댓글 올리기

対応ありがとうございます。次バージョンが楽しみです。

2023-07-02 22:02 Updated by: nmaya
  • Status Update from Open to Closed

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login