]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
store a copy of the extensions name
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Thu, 19 Mar 2015 20:22:29 +0000 (21:22 +0100)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Thu, 19 Mar 2015 20:22:29 +0000 (21:22 +0100)
lib/gnutls_extensions.c
lib/gnutls_extensions.h

index 473d8c0465a79a7b92f3891071f91b06e5d7f464..d75fc727d3840d008a6d2854ebf54e20610a7968 100644 (file)
@@ -50,7 +50,6 @@
 static void _gnutls_ext_unset_resumed_session_data(gnutls_session_t
                                                   session, uint16_t type);
 
-
 static size_t extfunc_size = 0;
 static extension_entry_st *extfunc = NULL;
 
@@ -394,6 +393,13 @@ int _gnutls_ext_init(void)
 
 void _gnutls_ext_deinit(void)
 {
+       unsigned i;
+       for (i = 0; i < extfunc_size; i++) {
+               if (extfunc[i].free_name != 0) {
+                       gnutls_free((void*)extfunc[i].name);
+               }
+       }
+
        gnutls_free(extfunc);
        extfunc = NULL;
        extfunc_size = 0;
@@ -725,7 +731,8 @@ _gnutls_ext_get_resumed_session_data(gnutls_session_t session,
  * @pack_func: a function which serializes the extension's private data (used on session packing for resumption)
  * @unpack_func: a function which will deserialize the extension's private data
  *
- * This function will register a new extension type.
+ * This function will register a new extension type. The extension will remain
+ * registered until gnutls_global_deinit() is called.
  *
  * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code.
  *
@@ -739,7 +746,10 @@ gnutls_ext_register(const char *name, int type, gnutls_ext_parse_type_t parse_ty
 {
        extension_entry_st tmp_mod;
 
-       tmp_mod.name = name;
+       memset(&tmp_mod, 0, sizeof(tmp_mod));
+
+       tmp_mod.name = gnutls_strdup(name);
+       tmp_mod.free_name = 1;
        tmp_mod.type = type;
        tmp_mod.parse_type = parse_type;
        tmp_mod.recv_func = recv_func;
index 3df0676e24b80e2e5d79897170d5dcfaa9a96b97..bfcc55af946919823788449571632ba783101516 100644 (file)
@@ -59,7 +59,9 @@ int _gnutls_ext_unpack(gnutls_session_t session,
                       gnutls_buffer_st * packed);
 
 typedef struct {
-       const char *name;
+       const char *name; /* const overriden when free_name is set */
+       unsigned free_name;
+
        uint16_t type;
        gnutls_ext_parse_type_t parse_type;