From 3d9ebb5044a9fb77ad253a1e20758811013fce0d Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 2 Mar 2013 01:09:47 +0100 Subject: [PATCH] Fix mem leak in config file parser This fixes the following leaks: ==18690== 256 bytes in 1 blocks are definitely lost in loss record 75 of 100 ==18690== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==18690== by 0x511613F: regcomp (regcomp.c:487) ==18690== by 0x4E34313: conf_parse_file (in /usr/lib/x86_64-linux-gnu/libnfc.so.4.0.0) ==18690== by 0x4E349F5: conf_devices_load.constprop.1 (in /usr/lib/x86_64-linux-gnu/libnfc.so.4.0.0) ==18690== by 0x4E362C0: nfc_context_new (in /usr/lib/x86_64-linux-gnu/libnfc.so.4.0.0) ==18690== by 0x4E34D08: nfc_init (in /usr/lib/x86_64-linux-gnu/libnfc.so.4.0.0) ==18690== ==18690== 32,068 (224 direct, 31,844 indirect) bytes in 1 blocks are definitely lost in loss record 98 of 100 ==18690== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==18690== by 0x4C28D6F: realloc (vg_replace_malloc.c:632) ==18690== by 0x5115DF3: re_compile_internal (regcomp.c:760) ==18690== by 0x51161AB: regcomp (regcomp.c:506) ==18690== by 0x4E34313: conf_parse_file (in /usr/lib/x86_64-linux-gnu/libnfc.so.4.0.0) ==18690== by 0x4E349F5: conf_devices_load.constprop.1 (in /usr/lib/x86_64-linux-gnu/libnfc.so.4.0.0) ==18690== by 0x4E362C0: nfc_context_new (in /usr/lib/x86_64-linux-gnu/libnfc.so.4.0.0) ==18690== by 0x4E34D08: nfc_init (in /usr/lib/x86_64-linux-gnu/libnfc.so.4.0.0) --- libnfc/conf.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libnfc/conf.c b/libnfc/conf.c index 87aec26..ca5f801 100644 --- a/libnfc/conf.c +++ b/libnfc/conf.c @@ -66,6 +66,7 @@ conf_parse_file(const char *filename, void (*conf_keyvalue)(void *data, const ch regmatch_t *pmatch = malloc(sizeof(*pmatch) * nmatch); if (!pmatch) { log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_ERROR, "%s", "Not enough memory: malloc failed."); + regfree(&preg); return false; } @@ -98,6 +99,7 @@ conf_parse_file(const char *filename, void (*conf_keyvalue)(void *data, const ch } free(pmatch); + regfree(&preg); return false; }