summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_asn1.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_asn1.c')
-rw-r--r--src/lib/libssl/ssl_asn1.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/lib/libssl/ssl_asn1.c b/src/lib/libssl/ssl_asn1.c
index 23bfe44e21..d8ff8fc4a3 100644
--- a/src/lib/libssl/ssl_asn1.c
+++ b/src/lib/libssl/ssl_asn1.c
@@ -298,6 +298,7 @@ SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, unsigned char **pp,
298 os.length = sizeof ret->session_id; 298 os.length = sizeof ret->session_id;
299 299
300 ret->session_id_length=os.length; 300 ret->session_id_length=os.length;
301 OPENSSL_assert(os.length <= sizeof ret->session_id);
301 memcpy(ret->session_id,os.data,os.length); 302 memcpy(ret->session_id,os.data,os.length);
302 303
303 M_ASN1_D2I_get(osp,d2i_ASN1_OCTET_STRING); 304 M_ASN1_D2I_get(osp,d2i_ASN1_OCTET_STRING);
@@ -369,9 +370,15 @@ SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, unsigned char **pp,
369 if(os.data != NULL) 370 if(os.data != NULL)
370 { 371 {
371 if (os.length > SSL_MAX_SID_CTX_LENGTH) 372 if (os.length > SSL_MAX_SID_CTX_LENGTH)
373 {
374 ret->sid_ctx_length=os.length;
372 SSLerr(SSL_F_D2I_SSL_SESSION,SSL_R_BAD_LENGTH); 375 SSLerr(SSL_F_D2I_SSL_SESSION,SSL_R_BAD_LENGTH);
373 ret->sid_ctx_length=os.length; 376 }
374 memcpy(ret->sid_ctx,os.data,os.length); 377 else
378 {
379 ret->sid_ctx_length=os.length;
380 memcpy(ret->sid_ctx,os.data,os.length);
381 }
375 OPENSSL_free(os.data); os.data=NULL; os.length=0; 382 OPENSSL_free(os.data); os.data=NULL; os.length=0;
376 } 383 }
377 else 384 else