diff options
Diffstat (limited to 'src/lib/libssl/ssl_lib.c')
-rw-r--r-- | src/lib/libssl/ssl_lib.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index 893abff1f4..1ac7d6f951 100644 --- a/src/lib/libssl/ssl_lib.c +++ b/src/lib/libssl/ssl_lib.c | |||
@@ -510,8 +510,6 @@ void SSL_free(SSL *s) | |||
510 | 510 | ||
511 | if (s->ctx) SSL_CTX_free(s->ctx); | 511 | if (s->ctx) SSL_CTX_free(s->ctx); |
512 | #ifndef OPENSSL_NO_TLSEXT | 512 | #ifndef OPENSSL_NO_TLSEXT |
513 | if (s->tlsext_hostname) | ||
514 | OPENSSL_free(s->tlsext_hostname); | ||
515 | if (s->initial_ctx) SSL_CTX_free(s->initial_ctx); | 513 | if (s->initial_ctx) SSL_CTX_free(s->initial_ctx); |
516 | if (s->tlsext_ocsp_exts) | 514 | if (s->tlsext_ocsp_exts) |
517 | sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, | 515 | sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, |
@@ -1228,36 +1226,33 @@ int SSL_set_cipher_list(SSL *s,const char *str) | |||
1228 | /* works well for SSLv2, not so good for SSLv3 */ | 1226 | /* works well for SSLv2, not so good for SSLv3 */ |
1229 | char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len) | 1227 | char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len) |
1230 | { | 1228 | { |
1231 | char *p; | 1229 | char *end; |
1232 | STACK_OF(SSL_CIPHER) *sk; | 1230 | STACK_OF(SSL_CIPHER) *sk; |
1233 | SSL_CIPHER *c; | 1231 | SSL_CIPHER *c; |
1232 | size_t curlen = 0; | ||
1234 | int i; | 1233 | int i; |
1235 | 1234 | ||
1236 | if ((s->session == NULL) || (s->session->ciphers == NULL) || | 1235 | if ((s->session == NULL) || (s->session->ciphers == NULL) || |
1237 | (len < 2)) | 1236 | (len < 2)) |
1238 | return(NULL); | 1237 | return(NULL); |
1239 | 1238 | ||
1240 | p=buf; | ||
1241 | sk=s->session->ciphers; | 1239 | sk=s->session->ciphers; |
1240 | buf[0] = '\0'; | ||
1242 | for (i=0; i<sk_SSL_CIPHER_num(sk); i++) | 1241 | for (i=0; i<sk_SSL_CIPHER_num(sk); i++) |
1243 | { | 1242 | { |
1244 | int n; | ||
1245 | |||
1246 | c=sk_SSL_CIPHER_value(sk,i); | 1243 | c=sk_SSL_CIPHER_value(sk,i); |
1247 | n=strlen(c->name); | 1244 | end = buf + curlen; |
1248 | if (n+1 > len) | 1245 | if (strlcat(buf, c->name, len) >= len || |
1246 | (curlen = strlcat(buf, ":", len)) >= len) | ||
1249 | { | 1247 | { |
1250 | if (p != buf) | 1248 | /* remove truncated cipher from list */ |
1251 | --p; | 1249 | *end = '\0'; |
1252 | *p='\0'; | 1250 | break; |
1253 | return buf; | ||
1254 | } | 1251 | } |
1255 | strcpy(p,c->name); | ||
1256 | p+=n; | ||
1257 | *(p++)=':'; | ||
1258 | len-=n+1; | ||
1259 | } | 1252 | } |
1260 | p[-1]='\0'; | 1253 | /* remove trailing colon */ |
1254 | if ((end = strrchr(buf, ':')) != NULL) | ||
1255 | *end = '\0'; | ||
1261 | return(buf); | 1256 | return(buf); |
1262 | } | 1257 | } |
1263 | 1258 | ||