summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2015-03-19 21:12:27 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2015-03-19 21:12:27 +0100
commitca2c06db1bfa8ed0c07c91669591949fd67a4bfd (patch)
tree5d2be1f9128fad2617ce42fb2edc03ab97f81de4 /lib
parent5bcdb9939aa93e52b20bb3b9a4d8252ab9a88b61 (diff)
downloadgnutls-ca2c06db1bfa8ed0c07c91669591949fd67a4bfd.tar.gz
deinitialize supplemental data on deinit
Diffstat (limited to 'lib')
-rw-r--r--lib/gnutls_global.c2
-rw-r--r--lib/gnutls_supplemental.c19
-rw-r--r--lib/gnutls_supplemental.h2
3 files changed, 21 insertions, 2 deletions
diff --git a/lib/gnutls_global.c b/lib/gnutls_global.c
index cb7448af64..d4a98537da 100644
--- a/lib/gnutls_global.c
+++ b/lib/gnutls_global.c
@@ -389,6 +389,8 @@ static void _gnutls_global_deinit(unsigned destructor)
gnutls_system_global_deinit();
_gnutls_cryptodev_deinit();
+ _gnutls_supplemental_deinit();
+
#ifdef ENABLE_PKCS11
/* Do not try to deinitialize the PKCS #11 libraries
* from the destructor. If we do and the PKCS #11 modules
diff --git a/lib/gnutls_supplemental.c b/lib/gnutls_supplemental.c
index d307f2097d..e7c4c42ff0 100644
--- a/lib/gnutls_supplemental.c
+++ b/lib/gnutls_supplemental.c
@@ -50,7 +50,7 @@
#include "gnutls_num.h"
typedef struct {
- const char *name;
+ char *name;
gnutls_supplemental_data_format_type_t type;
supp_recv_func supp_recv_func;
supp_send_func supp_send_func;
@@ -83,6 +83,19 @@ const char
return NULL;
}
+void _gnutls_supplemental_deinit(void)
+{
+ unsigned i;
+
+ for (i = 0; i < suppfunc_size; i++) {
+ gnutls_free(suppfunc[i].name);
+ }
+ gnutls_free(suppfunc);
+
+ suppfunc = NULL;
+ suppfunc_size = 0;
+}
+
static supp_recv_func
get_supp_func_recv(gnutls_supplemental_data_format_type_t type)
{
@@ -234,6 +247,8 @@ _gnutls_supplemental_register(gnutls_supplemental_entry *entry)
* @send_func: the function to send the data
*
* This function will register a new supplemental data type (rfc4680).
+ * The registered data will remain until gnutls_global_deinit()
+ * is called.
*
* Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code.
*
@@ -245,7 +260,7 @@ gnutls_supplemental_register(const char *name, gnutls_supplemental_data_format_t
{
gnutls_supplemental_entry tmp_entry;
- tmp_entry.name = name;
+ tmp_entry.name = strdup(name);
tmp_entry.type = type;
tmp_entry.supp_recv_func = recv_func;
tmp_entry.supp_send_func = send_func;
diff --git a/lib/gnutls_supplemental.h b/lib/gnutls_supplemental.h
index 03c3f3b5f7..63004f57ad 100644
--- a/lib/gnutls_supplemental.h
+++ b/lib/gnutls_supplemental.h
@@ -26,3 +26,5 @@ int _gnutls_parse_supplemental(gnutls_session_t session,
const uint8_t * data, int data_size);
int _gnutls_gen_supplemental(gnutls_session_t session,
gnutls_buffer_st * buf);
+
+void _gnutls_supplemental_deinit(void);