Skip to content
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

Fix ssltest.exe hangs when MinGW's openssl.exe exists #468

Merged
merged 2 commits into from
Apr 28, 2019

Conversation

Hamayama
Copy link
Contributor

MinGW の openssl.exe が存在すると、
axTLS の ssltest.exe のテストで固まる件に対応してみました。
(関連 #467 (comment))

固まる openssl.exe は以下のものになります。
C:\msys64\mingw64\bin\openssl.exe
C:\msys64\mingw32\bin\openssl.exe
(バージョンを 1.0.2 から 1.1.1b に更新しても同じでした)

以下の openssl.exe は固まりません (MSYSのもの)。
C:\msys64\usr\bin\openssl.exe
(バージョンを 1.0.2 から 1.1.1b に更新しても同じでした)

また、AppVeyor 上のテストでは固まらないことから、
mintty 上でテストしているときにのみ固まると思われます。

それで、探したところ、以下の情報がありました。

  1. https://stackoverflow.com/questions/9450120/openssl-hangs-and-does-not-exit
    (winpty をかませると固まらない)

  2. Document the undocumented -X switches rprichard/winpty#103
    (winpty は、-Xallow-non-tty -Xplain オプションを付けると、
    標準出力のリダイレクトに対応できる)

  3. Does winpty work with pipes? rprichard/winpty#101
    (winpty は、標準入力のリダイレクトには対応できないため、
    if [ -t 0 ]; then を使って判別して、
    リダイレクトがないときだけ winpty をかませるようにする)

以上のことから、試行錯誤でパッチを作成しました。
しかし、winpty に -Xallow-non-tty オプションを付けて実行すると、
実行後に mintty 上でキー入力がエコーされない状態になりました。
それで、テスト後に (sys-system "stty sane") を実行して、
端末をリセットするようにしました。

また、appveyor.yml に winpty のインストールを追加しました。

<テスト結果>
https://ci.appveyor.com/project/Hamayama/gauche/builds/24155999

@shirok
Copy link
Owner

shirok commented Apr 28, 2019

調査ありがとうございます。opensslが直接端末入力を読みにいっちゃってるんですね。これはアドホックに対応するしか無さそうですね…頂きます。

@shirok shirok merged commit a119fab into shirok:master Apr 28, 2019
@Hamayama Hamayama deleted the ssltest-mingw branch May 17, 2019 10:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants