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 | ||
