diff options
author | Tim Rühsen <tim.ruehsen@gmx.de> | 2019-05-20 12:46:54 +0200 |
---|---|---|
committer | Tim Rühsen <tim.ruehsen@gmx.de> | 2019-05-28 15:19:13 +0200 |
commit | 4d9bb0223a23f1198d224ed4ba34a9f6e64dca94 (patch) | |
tree | 8de4d2d1addcb63d7dc1f704a5c0ffad2bf20358 | |
parent | 6b8c972acff5f15fd39ff7d96b65048c5a69e834 (diff) | |
download | gnutls-4d9bb0223a23f1198d224ed4ba34a9f6e64dca94.tar.gz |
_gnutls_set_[str]datum: Cleanup, add function attributes
_gnutls_set_datum(): Do not change output 'dat' on error
_gnutls_set_strdatum: Likewise, cleanup code
Signed-off-by: Tim Rühsen <tim.ruehsen@gmx.de>
-rw-r--r-- | lib/datum.c | 22 | ||||
-rw-r--r-- | lib/datum.h | 18 |
2 files changed, 19 insertions, 21 deletions
diff --git a/lib/datum.c b/lib/datum.c index ff71068b99..bd0f216438 100644 --- a/lib/datum.c +++ b/lib/datum.c @@ -30,6 +30,7 @@ #include <datum.h> #include "errors.h" +/* On error, @dat is not changed. */ int _gnutls_set_datum(gnutls_datum_t * dat, const void *data, size_t data_size) { @@ -39,10 +40,11 @@ _gnutls_set_datum(gnutls_datum_t * dat, const void *data, size_t data_size) return 0; } - dat->data = gnutls_malloc(data_size); - if (dat->data == NULL) + unsigned char *m = gnutls_malloc(data_size); + if (!m) return GNUTLS_E_MEMORY_ERROR; + dat->data = m; dat->size = data_size; memcpy(dat->data, data, data_size); @@ -51,22 +53,22 @@ _gnutls_set_datum(gnutls_datum_t * dat, const void *data, size_t data_size) /* ensures that the data set are null-terminated * The function always returns an allocated string in @dat on success. + * On error, @dat is not changed. */ int _gnutls_set_strdatum(gnutls_datum_t * dat, const void *data, size_t data_size) { - if (data_size == 0 || data == NULL) { - dat->data = gnutls_calloc(1, 1); - dat->size = 0; - return 0; - } + if (data == NULL) + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); - dat->data = gnutls_malloc(data_size+1); - if (dat->data == NULL) + unsigned char *m = gnutls_malloc(data_size + 1); + if (!m) return GNUTLS_E_MEMORY_ERROR; + dat->data = m; dat->size = data_size; - memcpy(dat->data, data, data_size); + if (data_size) + memcpy(dat->data, data, data_size); dat->data[data_size] = 0; return 0; diff --git a/lib/datum.h b/lib/datum.h index cdab4b272d..fe847359b0 100644 --- a/lib/datum.h +++ b/lib/datum.h @@ -28,11 +28,13 @@ /* This will copy the provided data in @dat. If the provided data are * NULL or zero-size @dat will be NULL as well. */ +warn_unused_result nonnull((1)) int _gnutls_set_datum(gnutls_datum_t * dat, const void *data, size_t data_size); /* This will always return a non-NULL, and zero-terminated string in @dat. */ +warn_unused_result nonnull((1)) int _gnutls_set_strdatum(gnutls_datum_t * dat, const void *data, size_t data_size); @@ -40,17 +42,13 @@ int _gnutls_set_strdatum(gnutls_datum_t * dat, const void *data, inline static void _gnutls_free_datum(gnutls_datum_t * dat) { - if (dat == NULL) - return; - - if (dat->data != NULL) + if (dat != NULL) { gnutls_free(dat->data); - - dat->data = NULL; - dat->size = 0; + dat->size = 0; + } } -inline static +inline static nonnull_all void _gnutls_free_temp_key_datum(gnutls_datum_t * dat) { if (dat->data != NULL) { @@ -58,11 +56,10 @@ void _gnutls_free_temp_key_datum(gnutls_datum_t * dat) gnutls_free(dat->data); } - dat->data = NULL; dat->size = 0; } -inline static +inline static nonnull_all void _gnutls_free_key_datum(gnutls_datum_t * dat) { if (dat->data != NULL) { @@ -70,7 +67,6 @@ void _gnutls_free_key_datum(gnutls_datum_t * dat) gnutls_free(dat->data); } - dat->data = NULL; dat->size = 0; } |