diff --git a/src/internal.c b/src/internal.c index eb59f8133c..9352af5bd9 100644 --- a/src/internal.c +++ b/src/internal.c @@ -34824,6 +34824,8 @@ int SendCertificateVerify(WOLFSSL* ssl) #ifdef HAVE_SESSION_TICKET int SetTicket(WOLFSSL* ssl, const byte* ticket, word32 length) { + word32 sessIdLen = 0; + if (!HaveUniqueSessionObj(ssl)) return MEMORY_ERROR; @@ -34845,6 +34847,10 @@ int SetTicket(WOLFSSL* ssl, const byte* ticket, word32 length) ssl->session->ticketLen = (word16)length; if (length > 0) { + if (length >= ID_LEN) + sessIdLen = ID_LEN; + else + sessIdLen = length; XMEMCPY(ssl->session->ticket, ticket, length); if (ssl->session_ticket_cb != NULL) { ssl->session_ticket_cb(ssl, @@ -34856,15 +34862,17 @@ int SetTicket(WOLFSSL* ssl, const byte* ticket, word32 length) ssl->options.haveSessionId = 1; #ifdef WOLFSSL_TLS13 if (ssl->options.tls1_3) { + XMEMSET(ssl->session->sessionID, 0, ID_LEN); XMEMCPY(ssl->session->sessionID, - ssl->session->ticket + length - ID_LEN, ID_LEN); + ssl->session->ticket + length - sessIdLen, sessIdLen); ssl->session->sessionIDSz = ID_LEN; } else #endif { + XMEMSET(ssl->arrays->sessionID, 0, ID_LEN); XMEMCPY(ssl->arrays->sessionID, - ssl->session->ticket + length - ID_LEN, ID_LEN); + ssl->session->ticket + length - sessIdLen, sessIdLen); ssl->arrays->sessionIDSz = ID_LEN; } }