Patch from Konstantin Isakov <ikm@pisem.net>:

In most cases, dirname returns the same argument it was given, so this code
    works nice, but there's one special case: when the name contains no
    dirname, it returns "." (stored statically in the body of itself), and we
    get a segfault in attempt to free() it.
This patch fixes this problem.
This commit is contained in:
Eric Andersen 2002-09-30 20:14:57 +00:00
parent aa1d6ccbfb
commit d9d47c3078

View File

@ -16,9 +16,10 @@ extern void data_extract_all(archive_handle_t *archive_handle)
int res; int res;
if (archive_handle->flags & ARCHIVE_CREATE_LEADING_DIRS) { if (archive_handle->flags & ARCHIVE_CREATE_LEADING_DIRS) {
char *dir = dirname(strdup(file_header->name)); char *name = strdup(file_header->name);
make_directory (dir, 0777, FILEUTILS_RECUR); make_directory (dirname(name), 0777, FILEUTILS_RECUR);
} free(name);
}
/* Create the file */ /* Create the file */
switch(file_header->mode & S_IFMT) { switch(file_header->mode & S_IFMT) {