From 363e83304a6facb733b0cc5a505bd23930d54116 Mon Sep 17 00:00:00 2001 From: Edward Ding Date: Fri, 26 Oct 2018 15:08:56 -0700 Subject: [PATCH] fix memory leak in setup when datadir is invalid or setup failed --- src/libpostal.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/libpostal.c b/src/libpostal.c index d56e7000..b6348697 100644 --- a/src/libpostal.c +++ b/src/libpostal.c @@ -261,20 +261,22 @@ bool libpostal_setup_datadir(char *datadir) { numex_path = path_join(3, datadir, LIBPOSTAL_NUMEX_SUBDIR, NUMEX_DATA_FILE); address_dictionary_path = path_join(3, datadir, LIBPOSTAL_ADDRESS_EXPANSIONS_SUBDIR, ADDRESS_DICTIONARY_DATA_FILE); } + + bool setup_succeed = true; if (!transliteration_module_setup(transliteration_path)) { log_error("Error loading transliteration module, dir=%s\n", transliteration_path); - return false; + setup_succeed = false; } - if (!numex_module_setup(numex_path)) { + if (setup_succeed && !numex_module_setup(numex_path)) { log_error("Error loading numex module, dir=%s\n", numex_path); - return false; + setup_succeed = false; } - if (!address_dictionary_module_setup(address_dictionary_path)) { + if (setup_succeed && !address_dictionary_module_setup(address_dictionary_path)) { log_error("Error loading dictionary module, dir=%s\n", address_dictionary_path); - return false; + setup_succeed = false; } if (transliteration_path != NULL) { @@ -289,7 +291,7 @@ bool libpostal_setup_datadir(char *datadir) { free(address_dictionary_path); } - return true; + return setup_succeed; } bool libpostal_setup(void) {