diff options
Diffstat (limited to 'src/lib/libssl/ssl_lib.c')
| -rw-r--r-- | src/lib/libssl/ssl_lib.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index 68eee77e6f..1ac7d6f951 100644 --- a/src/lib/libssl/ssl_lib.c +++ b/src/lib/libssl/ssl_lib.c | |||
| @@ -1226,36 +1226,33 @@ int SSL_set_cipher_list(SSL *s,const char *str) | |||
| 1226 | /* works well for SSLv2, not so good for SSLv3 */ | 1226 | /* works well for SSLv2, not so good for SSLv3 */ |
| 1227 | 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) |
| 1228 | { | 1228 | { |
| 1229 | char *p; | 1229 | char *end; |
| 1230 | STACK_OF(SSL_CIPHER) *sk; | 1230 | STACK_OF(SSL_CIPHER) *sk; |
| 1231 | SSL_CIPHER *c; | 1231 | SSL_CIPHER *c; |
| 1232 | size_t curlen = 0; | ||
| 1232 | int i; | 1233 | int i; |
| 1233 | 1234 | ||
| 1234 | if ((s->session == NULL) || (s->session->ciphers == NULL) || | 1235 | if ((s->session == NULL) || (s->session->ciphers == NULL) || |
| 1235 | (len < 2)) | 1236 | (len < 2)) |
| 1236 | return(NULL); | 1237 | return(NULL); |
| 1237 | 1238 | ||
| 1238 | p=buf; | ||
| 1239 | sk=s->session->ciphers; | 1239 | sk=s->session->ciphers; |
| 1240 | buf[0] = '\0'; | ||
| 1240 | for (i=0; i<sk_SSL_CIPHER_num(sk); i++) | 1241 | for (i=0; i<sk_SSL_CIPHER_num(sk); i++) |
| 1241 | { | 1242 | { |
| 1242 | int n; | ||
| 1243 | |||
| 1244 | c=sk_SSL_CIPHER_value(sk,i); | 1243 | c=sk_SSL_CIPHER_value(sk,i); |
| 1245 | n=strlen(c->name); | 1244 | end = buf + curlen; |
| 1246 | if (n+1 > len) | 1245 | if (strlcat(buf, c->name, len) >= len || |
| 1246 | (curlen = strlcat(buf, ":", len)) >= len) | ||
| 1247 | { | 1247 | { |
| 1248 | if (p != buf) | 1248 | /* remove truncated cipher from list */ |
| 1249 | --p; | 1249 | *end = '\0'; |
| 1250 | *p='\0'; | 1250 | break; |
| 1251 | return buf; | ||
| 1252 | } | 1251 | } |
| 1253 | strcpy(p,c->name); | ||
| 1254 | p+=n; | ||
| 1255 | *(p++)=':'; | ||
| 1256 | len-=n+1; | ||
| 1257 | } | 1252 | } |
| 1258 | p[-1]='\0'; | 1253 | /* remove trailing colon */ |
| 1254 | if ((end = strrchr(buf, ':')) != NULL) | ||
| 1255 | *end = '\0'; | ||
| 1259 | return(buf); | 1256 | return(buf); |
| 1260 | } | 1257 | } |
| 1261 | 1258 | ||
