From e7f62742b6141fd19444fc0e191281777cd966f9 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 21 Sep 2010 19:38:50 +0100 Subject: [PATCH] leak: Free PCRE regexps when library is unloaded. The compiled PCRE regexps used for inspection were being leaked when the library was unloaded. (Found by valgrind). --- src/inspect.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/inspect.c b/src/inspect.c index 11a5374..bce0fd6 100644 --- a/src/inspect.c +++ b/src/inspect.c @@ -57,6 +57,8 @@ static pcre *re_xdev; static pcre *re_windows_version; static void compile_regexps (void) __attribute__((constructor)); +static void free_regexps (void) __attribute__((destructor)); + static void compile_regexps (void) { @@ -88,6 +90,22 @@ compile_regexps (void) COMPILE (re_windows_version, "^(\\d+)\\.(\\d+)", 0); } +static void +free_regexps (void) +{ + pcre_free (re_file_elf); + pcre_free (re_file_win64); + pcre_free (re_elf_ppc64); + pcre_free (re_fedora); + pcre_free (re_rhel_old); + pcre_free (re_rhel); + pcre_free (re_rhel_no_minor); + pcre_free (re_debian); + pcre_free (re_aug_seq); + pcre_free (re_xdev); + pcre_free (re_windows_version); +} + /* Match a regular expression which contains no captures. Returns * true if it matches or false if it doesn't. */ -- 1.8.3.1