httpプロキシでユーザ認証が必要な場合、異常終了することがある
httpプロキシ経由で接続し、プロキシがユーザ認証を必要とする場合に、認証情報入力用の画面がでますが、その後しばらくして異常終了します(TeraTerm4.92)。
通信時のログを見ると、 TTProxy/ProxyWSockHook.h の1392行で出力している CONNECT のみ出力されており、後続の行は出力されていません。
send: "CONNECT host:port HTTP/1.0\r\n"
該当ソースの1407行目でパスワードを追加している際のエリアの長さがおかしいのではないでしょうか?
strcpy_s(auth + userlen + 1, passlen, proxy.pass);
正しくは passlen + 1 であるべきだと思われます。
// 修正後イメージ strcpy_s(auth + userlen + 1, passlen + 1, proxy.pass);
また、その後のbase64エンコードのロジックですが1418行のループを抜けた時点で bits が0でない場合にエンコード結果がおかしくなると思われます。
例えば、ユーザ名: user 、パスワード passwd であれば、base64エンコード結果は dXNlcjpwYXNzd2Q= であるべきだと思うのですが、現在は dXNlcjpwYXNzd2== になってしまうと思います。
以下のようにすべきかと思われます。
/* make base64 string */ while (*src != '\0') { data = (data << 8) | *src++; bits += 8; while (bits >= 6){ bits -= 6; *dst++ = base64_table[0x3F & (data >> bits)]; encodedlen--; } } // ←ここが1418行目 // ここから追加 if (bits > 0) { *dst++ = base64_table[0x3F & (data << (6 - bits))]; encodedlen--; } // ここまで追加 while (encodedlen-- > 0) { *dst++ = '='; } *dst = '\0';
お手数ですが、ご確認願います。
デバッグありがとうございます。r6525 r6526 にて修正をコミットしました。
httpプロキシ経由で接続し、プロキシがユーザ認証を必要とする場合に、認証情報入力用の画面がでますが、その後しばらくして異常終了します(TeraTerm4.92)。
通信時のログを見ると、 TTProxy/ProxyWSockHook.h の1392行で出力している CONNECT のみ出力されており、後続の行は出力されていません。
該当ソースの1407行目でパスワードを追加している際のエリアの長さがおかしいのではないでしょうか?
正しくは passlen + 1 であるべきだと思われます。
また、その後のbase64エンコードのロジックですが1418行のループを抜けた時点で bits が0でない場合にエンコード結果がおかしくなると思われます。
例えば、ユーザ名: user 、パスワード passwd であれば、base64エンコード結果は dXNlcjpwYXNzd2Q= であるべきだと思うのですが、現在は dXNlcjpwYXNzd2== になってしまうと思います。
以下のようにすべきかと思われます。
お手数ですが、ご確認願います。