summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_lib.c')
-rw-r--r--src/lib/libssl/ssl_lib.c29
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 */
1229char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len) 1227char *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