summaryrefslogtreecommitdiffstats
path: root/ssl
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2014-02-28 18:37:08 +0000
committerDr. Stephen Henson <steve@openssl.org>2014-03-01 23:14:08 +0000
commit976c58302b13d085edb3ab822f5eac4b2f1bff95 (patch)
treed9ddbcc1bfd210afc13ac6f3360f3f24a177d338 /ssl
parentb60272b01fcb4f69201b3e1659b4f7e9e9298dfb (diff)
Add function to free compression methods.
Although the memory allocated by compression methods is fixed and cannot grow over time it can cause warnings in some leak checking tools. The function SSL_COMP_free_compression_methods() will free and zero the list of supported compression methods. This should *only* be called in a single threaded context when an application is shutting down to avoid interfering with existing contexts attempting to look up compression methods.
Diffstat (limited to 'ssl')
-rw-r--r--ssl/ssl.h1
-rw-r--r--ssl/ssl_ciph.c12
2 files changed, 13 insertions, 0 deletions
diff --git a/ssl/ssl.h b/ssl/ssl.h
index b70f086c01..6bbe04d18a 100644
--- a/ssl/ssl.h
+++ b/ssl/ssl.h
@@ -2510,6 +2510,7 @@ const COMP_METHOD *SSL_get_current_expansion(SSL *s);
const char *SSL_COMP_get_name(const COMP_METHOD *comp);
STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) *meths);
+void SSL_COMP_free_compression_methods(void);
int SSL_COMP_add_compression_method(int id,COMP_METHOD *cm);
#else
const void *SSL_get_current_compression(SSL *s);
diff --git a/ssl/ssl_ciph.c b/ssl/ssl_ciph.c
index 1ea202f136..c8057aa85d 100644
--- a/ssl/ssl_ciph.c
+++ b/ssl/ssl_ciph.c
@@ -1877,6 +1877,18 @@ STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) *meths)
return old_meths;
}
+static void cmeth_free(SSL_COMP *cm)
+ {
+ OPENSSL_free(cm);
+ }
+
+void SSL_COMP_free_compression_methods(void)
+ {
+ STACK_OF(SSL_COMP) *old_meths = ssl_comp_methods;
+ ssl_comp_methods = NULL;
+ sk_SSL_COMP_pop_free(old_meths, cmeth_free);
+ }
+
int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm)
{
SSL_COMP *comp;