diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libssl/src/ssl/s3_enc.c | 20 | 
1 files changed, 12 insertions, 8 deletions
| diff --git a/src/lib/libssl/src/ssl/s3_enc.c b/src/lib/libssl/src/ssl/s3_enc.c index dbefad77b2..f4ac5222f3 100644 --- a/src/lib/libssl/src/ssl/s3_enc.c +++ b/src/lib/libssl/src/ssl/s3_enc.c | |||
| @@ -584,31 +584,35 @@ ssl3_digest_cached_records(SSL *s) | |||
| 584 | long hdatalen; | 584 | long hdatalen; | 
| 585 | void *hdata; | 585 | void *hdata; | 
| 586 | 586 | ||
| 587 | /* Allocate handshake_dgst array */ | ||
| 588 | ssl3_free_digest_list(s); | 587 | ssl3_free_digest_list(s); | 
| 588 | |||
| 589 | s->s3->handshake_dgst = calloc(SSL_MAX_DIGEST, sizeof(EVP_MD_CTX *)); | 589 | s->s3->handshake_dgst = calloc(SSL_MAX_DIGEST, sizeof(EVP_MD_CTX *)); | 
| 590 | hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata); | 590 | hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata); | 
| 591 | if (hdatalen <= 0) { | 591 | if (hdatalen <= 0) { | 
| 592 | SSLerr(SSL_F_SSL3_DIGEST_CACHED_RECORDS, SSL_R_BAD_HANDSHAKE_LENGTH); | 592 | SSLerr(SSL_F_SSL3_DIGEST_CACHED_RECORDS, | 
| 593 | SSL_R_BAD_HANDSHAKE_LENGTH); | ||
| 593 | return 0; | 594 | return 0; | 
| 594 | } | 595 | } | 
| 595 | 596 | ||
| 596 | /* Loop through bitso of algorithm2 field and create MD_CTX-es */ | 597 | /* Loop through bits of the algorithm2 field and create MD contexts. */ | 
| 597 | for (i = 0; ssl_get_handshake_digest(i, &mask, &md); i++) { | 598 | for (i = 0; ssl_get_handshake_digest(i, &mask, &md); i++) { | 
| 598 | if ((mask & ssl_get_algorithm2(s)) && md) { | 599 | if ((mask & ssl_get_algorithm2(s)) && md) { | 
| 599 | s->s3->handshake_dgst[i] = EVP_MD_CTX_create(); | 600 | s->s3->handshake_dgst[i] = EVP_MD_CTX_create(); | 
| 600 | if (s->s3->handshake_dgst[i] == NULL) { | 601 | if (s->s3->handshake_dgst[i] == NULL) { | 
| 601 | SSLerr(SSL_F_SSL3_DIGEST_CACHED_RECORDS, | 602 | SSLerr(SSL_F_SSL3_DIGEST_CACHED_RECORDS, | 
| 602 | ERR_R_MALLOC_FAILURE); | 603 | ERR_R_MALLOC_FAILURE); | 
| 604 | return 0; | ||
| 603 | } | 605 | } | 
| 604 | EVP_DigestInit_ex(s->s3->handshake_dgst[i], md, NULL); | 606 | if (!EVP_DigestInit_ex(s->s3->handshake_dgst[i], | 
| 605 | EVP_DigestUpdate(s->s3->handshake_dgst[i], hdata, hdatalen); | 607 | md, NULL)) | 
| 606 | } else { | 608 | return 0; | 
| 607 | s->s3->handshake_dgst[i] = NULL; | 609 | if (!EVP_DigestUpdate(s->s3->handshake_dgst[i], hdata, | 
| 610 | hdatalen)) | ||
| 611 | return 0; | ||
| 608 | } | 612 | } | 
| 609 | } | 613 | } | 
| 614 | |||
| 610 | if (!(s->s3->flags & TLS1_FLAGS_KEEP_HANDSHAKE)) { | 615 | if (!(s->s3->flags & TLS1_FLAGS_KEEP_HANDSHAKE)) { | 
| 611 | /* Free handshake_buffer BIO */ | ||
| 612 | BIO_free(s->s3->handshake_buffer); | 616 | BIO_free(s->s3->handshake_buffer); | 
| 613 | s->s3->handshake_buffer = NULL; | 617 | s->s3->handshake_buffer = NULL; | 
| 614 | } | 618 | } | 
