@@ -487,6 +487,12 @@ int wolfSSL_memsave_session_cache(void* mem, int sz)
487487int wolfSSL_memrestore_session_cache (const void * mem , int sz )
488488{
489489 int i ;
490+ #ifndef SESSION_CACHE_DYNAMIC_MEM
491+ #if defined(HAVE_SESSION_TICKET ) || \
492+ (defined(SESSION_CERTS ) && defined(OPENSSL_EXTRA ))
493+ int j ;
494+ #endif
495+ #endif
490496 cache_header_t cache_header ;
491497 SessionRow * row = (SessionRow * )((byte * )mem + sizeof (cache_header ));
492498
@@ -523,21 +529,24 @@ int wolfSSL_memrestore_session_cache(const void* mem, int sz)
523529
524530 XMEMCPY (& SessionCache [i ], row ++ , SIZEOF_SESSION_ROW );
525531 #ifndef SESSION_CACHE_DYNAMIC_MEM
532+ #if defined(HAVE_SESSION_TICKET ) || \
533+ (defined(SESSION_CERTS ) && defined(OPENSSL_EXTRA ))
526534 /* Reset pointers to safe values after raw copy */
527- {
528- int j ;
529- for (j = 0 ; j < SESSIONS_PER_ROW ; j ++ ) {
530- WOLFSSL_SESSION * s = & SessionCache [i ].Sessions [j ];
535+ for (j = 0 ; j < SESSIONS_PER_ROW ; j ++ ) {
536+ WOLFSSL_SESSION * s = & SessionCache [i ].Sessions [j ];
531537 #ifdef HAVE_SESSION_TICKET
532- s -> ticket = s -> staticTicket ;
533- s -> ticketLenAlloc = 0 ;
538+ s -> ticket = s -> staticTicket ;
539+ s -> ticketLenAlloc = 0 ;
540+ if (s -> ticketLen > SESSION_TICKET_LEN ) {
541+ s -> ticketLen = SESSION_TICKET_LEN ;
542+ }
534543 #endif
535544 #if defined(SESSION_CERTS ) && defined(OPENSSL_EXTRA )
536- s -> peer = NULL ;
545+ s -> peer = NULL ;
537546 #endif
538- }
539547 }
540548 #endif
549+ #endif
541550 #ifdef ENABLE_SESSION_CACHE_ROW_LOCK
542551 SESSION_ROW_UNLOCK (& SessionCache [i ]);
543552 #endif
@@ -698,6 +707,8 @@ int wolfSSL_restore_session_cache(const char *fname)
698707
699708 ret = (int )XFREAD (& SessionCache [i ], SIZEOF_SESSION_ROW , 1 , file );
700709 #ifndef SESSION_CACHE_DYNAMIC_MEM
710+ #if defined(HAVE_SESSION_TICKET ) || \
711+ (defined(SESSION_CERTS ) && defined(OPENSSL_EXTRA ))
701712 /* Reset pointers to safe values after raw copy */
702713 {
703714 int j ;
@@ -706,13 +717,17 @@ int wolfSSL_restore_session_cache(const char *fname)
706717 #ifdef HAVE_SESSION_TICKET
707718 s -> ticket = s -> staticTicket ;
708719 s -> ticketLenAlloc = 0 ;
720+ if (s -> ticketLen > SESSION_TICKET_LEN ) {
721+ s -> ticketLen = SESSION_TICKET_LEN ;
722+ }
709723 #endif
710724 #if defined(SESSION_CERTS ) && defined(OPENSSL_EXTRA )
711725 s -> peer = NULL ;
712726 #endif
713727 }
714728 }
715729 #endif
730+ #endif
716731 #ifdef ENABLE_SESSION_CACHE_ROW_LOCK
717732 SESSION_ROW_UNLOCK (& SessionCache [i ]);
718733 #endif
0 commit comments