diff --git a/ssl/statem/extensions_srvr.c b/ssl/statem/extensions_srvr.c index 9fe58a780ad0bcd8bddb8776b6911dcadc42aab6..a3c2fbf7de516de653de5ccede29edf871081699 100644 --- a/ssl/statem/extensions_srvr.c +++ b/ssl/statem/extensions_srvr.c @@ -641,14 +641,16 @@ int tls_parse_ctos_supported_groups(SSL *s, PACKET *pkt, unsigned int context, return 0; } - OPENSSL_free(s->session->ext.supportedgroups); - s->session->ext.supportedgroups = NULL; - s->session->ext.supportedgroups_len = 0; - if (!PACKET_memdup(&supported_groups_list, - &s->session->ext.supportedgroups, - &s->session->ext.supportedgroups_len)) { - *al = SSL_AD_INTERNAL_ERROR; - return 0; + if (!s->hit || SSL_IS_TLS13(s)) { + OPENSSL_free(s->session->ext.supportedgroups); + s->session->ext.supportedgroups = NULL; + s->session->ext.supportedgroups_len = 0; + if (!PACKET_memdup(&supported_groups_list, + &s->session->ext.supportedgroups, + &s->session->ext.supportedgroups_len)) { + *al = SSL_AD_INTERNAL_ERROR; + return 0; + } } return 1;