From: Nikos Mavrogiannopoulos Date: Sat, 28 May 2011 21:54:33 +0000 (+0200) Subject: simplified _gnutls_supported_compression_methods(). X-Git-Tag: gnutls_2_99_3~87 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=14f27b4e2488f82eeaf05b78073daedb0712a76f;p=thirdparty%2Fgnutls.git simplified _gnutls_supported_compression_methods(). --- diff --git a/lib/gnutls_compress.c b/lib/gnutls_compress.c index 2c5fa09b03..cb8d65b99f 100644 --- a/lib/gnutls_compress.c +++ b/lib/gnutls_compress.c @@ -256,13 +256,12 @@ _gnutls_compression_is_ok (gnutls_compression_method_t algorithm) #define SUPPORTED_COMPRESSION_METHODS session->internals.priorities.compression.algorithms int _gnutls_supported_compression_methods (gnutls_session_t session, - uint8_t ** comp) + uint8_t * comp, size_t comp_size) { unsigned int i, j; - *comp = gnutls_malloc (sizeof (uint8_t) * SUPPORTED_COMPRESSION_METHODS); - if (*comp == NULL) - return GNUTLS_E_MEMORY_ERROR; + if (comp_size < SUPPORTED_COMPRESSION_METHODS) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); for (i = j = 0; i < SUPPORTED_COMPRESSION_METHODS; i++) { @@ -279,15 +278,13 @@ _gnutls_supported_compression_methods (gnutls_session_t session, continue; } - (*comp)[j] = (uint8_t) tmp; + comp[j] = (uint8_t) tmp; j++; } if (j == 0) { gnutls_assert (); - gnutls_free (*comp); - *comp = NULL; return GNUTLS_E_NO_COMPRESSION_ALGORITHMS; } return j; diff --git a/lib/gnutls_compress.h b/lib/gnutls_compress.h index 35af229d5c..ca58bdf70a 100644 --- a/lib/gnutls_compress.h +++ b/lib/gnutls_compress.h @@ -36,7 +36,7 @@ int _gnutls_m_compressed2plaintext (gnutls_session_t session, /* Algorithm handling. */ int _gnutls_supported_compression_methods (gnutls_session_t session, - uint8_t ** comp); + uint8_t * comp, size_t max_comp); int _gnutls_compression_is_ok (gnutls_compression_method_t algorithm); int _gnutls_compression_get_num (gnutls_compression_method_t algorithm); gnutls_compression_method_t _gnutls_compression_get_id (int num); diff --git a/lib/gnutls_handshake.c b/lib/gnutls_handshake.c index 02467b46ec..9eeafae5e8 100644 --- a/lib/gnutls_handshake.c +++ b/lib/gnutls_handshake.c @@ -1052,9 +1052,9 @@ _gnutls_server_select_comp_method (gnutls_session_t session, opaque * data, int datalen) { int x, i, j; - uint8_t *comps; + uint8_t comps[MAX_ALGOS]; - x = _gnutls_supported_compression_methods (session, &comps); + x = _gnutls_supported_compression_methods (session, comps, MAX_ALGOS); if (x < 0) { gnutls_assert (); @@ -1070,8 +1070,6 @@ _gnutls_server_select_comp_method (gnutls_session_t session, gnutls_compression_method_t method = _gnutls_compression_get_id (comps[i]); - gnutls_free (comps); - _gnutls_epoch_set_compression (session, EPOCH_NEXT, method); session->security_parameters.compression_method = method; @@ -1088,7 +1086,6 @@ _gnutls_server_select_comp_method (gnutls_session_t session, /* we were not able to find a compatible compression * algorithm */ - gnutls_free (comps); gnutls_assert (); return GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM; @@ -1538,7 +1535,7 @@ static int _gnutls_client_set_comp_method (gnutls_session_t session, opaque comp_method) { int comp_methods_num; - uint8_t *compression_methods; + uint8_t compression_methods[MAX_ALGOS]; int id = _gnutls_compression_get_id(comp_method); int i; @@ -1546,7 +1543,7 @@ _gnutls_client_set_comp_method (gnutls_session_t session, opaque comp_method) gnutls_compression_get_name(id), (int)comp_method); comp_methods_num = _gnutls_supported_compression_methods (session, - &compression_methods); + compression_methods, MAX_ALGOS); if (comp_methods_num < 0) { gnutls_assert (); @@ -1562,8 +1559,6 @@ _gnutls_client_set_comp_method (gnutls_session_t session, opaque comp_method) } } - gnutls_free (compression_methods); - if (comp_methods_num != 0) { gnutls_assert (); @@ -1849,42 +1844,27 @@ static int _gnutls_copy_comp_methods (gnutls_session_t session, gnutls_buffer_st * cdata) { - int ret, i; - uint8_t *compression_methods, comp_num; + int ret; + uint8_t compression_methods[MAX_ALGOS], comp_num; size_t init_length = cdata->length; - ret = _gnutls_supported_compression_methods (session, &compression_methods); + ret = _gnutls_supported_compression_methods (session, compression_methods, MAX_ALGOS); if (ret < 0) - { - gnutls_assert (); - return ret; - } + return gnutls_assert_val(ret); comp_num = ret; /* put the number of compression methods */ ret = _gnutls_buffer_append_prefix(cdata, 8, comp_num); if (ret < 0) - { - gnutls_assert(); - goto cleanup; - } + return gnutls_assert_val(ret); - for (i = 0; i < comp_num; i++) - { - ret = _gnutls_buffer_append_data(cdata, &compression_methods[i], 1); - if (ret < 0) - { - gnutls_assert(); - goto cleanup; - } - } + ret = _gnutls_buffer_append_data(cdata, compression_methods, comp_num); + if (ret < 0) + return gnutls_assert_val(ret); ret = cdata->length - init_length; -cleanup: - gnutls_free (compression_methods); - return ret; }