From 9ea294cb89d60a4393e9266ee0364d4cf0daa5c7 Mon Sep 17 00:00:00 2001 From: Tim Kosse Date: Fri, 15 Jan 2016 14:45:42 +0100 Subject: Reset extensions_sent_size only at start of handshake That is, do not reset it when completing it so that we can use the negotiated extensions even after the handshake is complete. Signed-off-by: Nikos Mavrogiannopoulos --- lib/extensions.c | 5 +++-- lib/handshake.c | 1 + lib/state.c | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/extensions.c b/lib/extensions.c index 185fd14c73..905baf8328 100644 --- a/lib/extensions.c +++ b/lib/extensions.c @@ -157,8 +157,9 @@ const char *gnutls_ext_get_name(unsigned int ext) return NULL; } -/* Checks if the extension we just received is one of the - * requested ones. Otherwise it's a fatal error. +/* Checks if the extension @type provided has been requested + * by us (in client side). In that case it returns zero, + * otherwise a negative error value. */ int _gnutls_extension_list_check(gnutls_session_t session, uint16_t type) diff --git a/lib/handshake.c b/lib/handshake.c index 965698e3ca..7dccae6030 100644 --- a/lib/handshake.c +++ b/lib/handshake.c @@ -2563,6 +2563,7 @@ int gnutls_handshake(gnutls_session_t session) if (session->internals.priorities.protocol.algorithms == 0) return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET); + session->internals.extensions_sent_size = 0; session->internals.handshake_in_progress = 1; session->internals.vc_status = -1; gettime(&session->internals.handshake_start_time); diff --git a/lib/state.c b/lib/state.c index 6527695067..f96f43319b 100644 --- a/lib/state.c +++ b/lib/state.c @@ -274,8 +274,6 @@ inline static void deinit_internal_params(gnutls_session_t session) */ static void _gnutls_handshake_internal_state_init(gnutls_session_t session) { - session->internals.extensions_sent_size = 0; - /* by default no selected certificate */ session->internals.adv_version_major = 0; session->internals.adv_version_minor = 0; @@ -392,6 +390,8 @@ int gnutls_init(gnutls_session_t * session, unsigned int flags) _gnutls_handshake_internal_state_init(*session); + (*session)->internals.extensions_sent_size = 0; + /* emulate old gnutls behavior for old applications that do not use the priority_* * functions. */ -- cgit v1.2.1