From: Tobias Brunner Date: Fri, 21 Feb 2014 13:58:01 +0000 (+0100) Subject: settings: Use dirname(3) correctly X-Git-Tag: 5.1.2~9^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=caf1770905e81b95fbe7f3e9125f24719368c3e9;p=thirdparty%2Fstrongswan.git settings: Use dirname(3) correctly dirname(3) may return a pointer to a statically allocated buffer. So freeing the returned value can result to undefined behavior. This was noticed on FreeBSD where it caused very strange crashes. It is also not thread-safe, which will be addressed later. --- diff --git a/src/libstrongswan/utils/settings.c b/src/libstrongswan/utils/settings.c index a2c892211d..27a665d16a 100644 --- a/src/libstrongswan/utils/settings.c +++ b/src/libstrongswan/utils/settings.c @@ -1302,15 +1302,15 @@ static bool parse_files(linked_list_t *contents, char *file, int level, } else { /* base relative paths to the directory of the current file */ - char *dir = strdup(file); - dir = dirname(dir); + char *path = strdup(file); + char *dir = dirname(path); if (snprintf(pat, sizeof(pat), "%s/%s", dir, pattern) >= sizeof(pat)) { DBG1(DBG_LIB, "include pattern too long, ignored"); - free(dir); + free(path); return TRUE; } - free(dir); + free(path); } #ifdef HAVE_GLOB_H {