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.
This commit is contained in:
parent
a21d4096e5
commit
caf1770905
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue