diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2013-08-03 19:56:54 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2013-08-03 20:03:54 +0200 |
commit | b3dcfa39112f456e96953915a2812980fee29d9f (patch) | |
tree | acc85bd077b09dbc4849c13598873a81446d0a07 | |
parent | 9d7759a7044236ef414a978b60705f33eaddbc8f (diff) | |
download | gnutls-b3dcfa39112f456e96953915a2812980fee29d9f.tar.gz |
don't ignore errors when copying resumption values
-rw-r--r-- | lib/gnutls_handshake.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/lib/gnutls_handshake.c b/lib/gnutls_handshake.c index ae486213f7..ca458cb6b0 100644 --- a/lib/gnutls_handshake.c +++ b/lib/gnutls_handshake.c @@ -121,9 +121,11 @@ _gnutls_handshake_hash_buffers_clear (gnutls_session_t session) * internals, and to security_parameters. * this will keep as less data to security_parameters. */ -static void +static int resume_copy_required_values (gnutls_session_t session) { +int ret; + /* get the new random values */ memcpy (session->internals.resumed_security_parameters.server_random, session->security_parameters.server_random, GNUTLS_RANDOM_SIZE); @@ -138,12 +140,17 @@ resume_copy_required_values (gnutls_session_t session) session->internals.resumed_security_parameters.cipher_suite, 2); session->security_parameters.compression_method = session->internals.resumed_security_parameters.compression_method; - _gnutls_epoch_set_cipher_suite (session, EPOCH_NEXT, + ret = _gnutls_epoch_set_cipher_suite (session, EPOCH_NEXT, session-> internals.resumed_security_parameters.cipher_suite); - _gnutls_epoch_set_compression (session, EPOCH_NEXT, + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_epoch_set_compression (session, EPOCH_NEXT, session-> internals.resumed_security_parameters.compression_method); + if (ret < 0) + return gnutls_assert_val(ret); /* or write_compression_algorithm * they are the same @@ -152,10 +159,12 @@ resume_copy_required_values (gnutls_session_t session) session->security_parameters.entity = session->internals.resumed_security_parameters.entity; - if (session->internals.resumed_security_parameters.pversion != NULL) - _gnutls_set_current_version (session, - session->internals.resumed_security_parameters. - pversion->id); + if (session->internals.resumed_security_parameters.pversion == NULL) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + _gnutls_set_current_version (session, + session->internals.resumed_security_parameters. + pversion->id); session->security_parameters.cert_type = session->internals.resumed_security_parameters.cert_type; @@ -166,6 +175,7 @@ resume_copy_required_values (gnutls_session_t session) session->security_parameters.session_id_size = session->internals.resumed_security_parameters.session_id_size; + return 0; } @@ -536,7 +546,10 @@ _gnutls_read_client_hello (gnutls_session_t session, uint8_t * data, return ret; } - resume_copy_required_values (session); + ret = resume_copy_required_values (session); + if (ret < 0) + return gnutls_assert_val(ret); + session->internals.resumed = RESUME_TRUE; return _gnutls_user_hello_func (session, adv_version); @@ -619,7 +632,9 @@ _gnutls_read_client_hello (gnutls_session_t session, uint8_t * data, session->internals.resumed_security_parameters.max_record_send_size = session->security_parameters.max_record_send_size; - resume_copy_required_values (session); + ret = resume_copy_required_values (session); + if (ret < 0) + return gnutls_assert_val(ret); return _gnutls_user_hello_func (session, adv_version); } |