summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2015-09-30 09:41:25 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2015-09-30 09:41:25 +0200
commit146a96de82aebeca5e9b5bfe7fc69456f2bf2d0e (patch)
tree6512ec2e2a582a35dc68422ed9ce3f21f6b09b72
parent72b7c57093909d3f2333ebbc8c91953fce899b17 (diff)
downloadlibgit2-146a96de82aebeca5e9b5bfe7fc69456f2bf2d0e.tar.gz
openssl: don't try to teardown an unconnected SSL contextcmn/ssl-null
SSL_shutdown() does not like it when we pass an unitialized ssl context to it. This means that when we fail to connect to a host, we hide the error message saying so with OpenSSL's indecipherable error message.
-rw-r--r--src/openssl_stream.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/openssl_stream.c b/src/openssl_stream.c
index 8ff53d4b1..54dd761ca 100644
--- a/src/openssl_stream.c
+++ b/src/openssl_stream.c
@@ -302,6 +302,7 @@ cert_fail_name:
typedef struct {
git_stream parent;
git_stream *io;
+ bool connected;
char *host;
SSL *ssl;
git_cert_x509 cert_info;
@@ -318,6 +319,8 @@ int openssl_connect(git_stream *stream)
if ((ret = git_stream_connect(st->io)) < 0)
return ret;
+ st->connected = true;
+
bio = BIO_new(&git_stream_bio_method);
GITERR_CHECK_ALLOC(bio);
bio->ptr = st->io;
@@ -406,9 +409,11 @@ int openssl_close(git_stream *stream)
openssl_stream *st = (openssl_stream *) stream;
int ret;
- if ((ret = ssl_teardown(st->ssl)) < 0)
+ if (st->connected && (ret = ssl_teardown(st->ssl)) < 0)
return -1;
+ st->connected = false;
+
return git_stream_close(st->io);
}