unzip: Sync with NetBSD upstream.
- Ignore malformed directory entries as created by Dropbox ("/"). (rev 1.24) - Use libarchive 3.x interface: check result for archive_read_free() and don't call archive_read_close manually. (rev 1.23) - Always overwrite symlinks on extraction, ever if they're newer than entries in archive. - Use getline() rather than getdelim(). PR: 231827 Submitted by: ak Reviewed by: mm Obtained from: NetBSD MFC after: 2 weeks
This commit is contained in:
parent
bfe90bb336
commit
0cdfa49564
@ -385,6 +385,13 @@ extract_dir(struct archive *a, struct archive_entry *e, const char *path)
|
||||
{
|
||||
int mode;
|
||||
|
||||
/*
|
||||
* Dropbox likes to create '/' directory entries, just ignore
|
||||
* such junk.
|
||||
*/
|
||||
if (*path == '\0')
|
||||
return;
|
||||
|
||||
mode = archive_entry_mode(e) & 0777;
|
||||
if (mode == 0)
|
||||
mode = 0755;
|
||||
@ -451,7 +458,7 @@ handle_existing_file(char **path)
|
||||
free(*path);
|
||||
*path = NULL;
|
||||
alen = 0;
|
||||
len = getdelim(path, &alen, '\n', stdin);
|
||||
len = getline(path, &alen, stdin);
|
||||
if ((*path)[len - 1] == '\n')
|
||||
(*path)[len - 1] = '\0';
|
||||
return 0;
|
||||
@ -601,7 +608,7 @@ extract_file(struct archive *a, struct archive_entry *e, char **path)
|
||||
if (lstat(*path, &sb) == 0) {
|
||||
if (u_opt || f_opt) {
|
||||
/* check if up-to-date */
|
||||
if ((S_ISREG(sb.st_mode) || S_ISLNK(sb.st_mode)) &&
|
||||
if (S_ISREG(sb.st_mode) &&
|
||||
(sb.st_mtim.tv_sec > mtime.tv_sec ||
|
||||
(sb.st_mtim.tv_sec == mtime.tv_sec &&
|
||||
sb.st_mtim.tv_nsec >= mtime.tv_nsec)))
|
||||
@ -916,8 +923,7 @@ unzip(const char *fn)
|
||||
}
|
||||
}
|
||||
|
||||
ac(archive_read_close(a));
|
||||
(void)archive_read_free(a);
|
||||
ac(archive_read_free(a));
|
||||
|
||||
if (t_opt) {
|
||||
if (error_count > 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user