git: 0cdfa4956424 - main - unzip: Sync with NetBSD upstream.
Yoshihiro Takahashi
nyan at FreeBSD.org
Sat Jan 2 01:51:33 UTC 2021
The branch main has been updated by nyan:
URL: https://cgit.FreeBSD.org/src/commit/?id=0cdfa4956424dc816944a84568a4d9900b68f5e3
commit 0cdfa4956424dc816944a84568a4d9900b68f5e3
Author: Yoshihiro Takahashi <nyan at FreeBSD.org>
AuthorDate: 2021-01-02 01:50:08 +0000
Commit: Yoshihiro Takahashi <nyan at FreeBSD.org>
CommitDate: 2021-01-02 01:50:08 +0000
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
---
usr.bin/unzip/unzip.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/usr.bin/unzip/unzip.c b/usr.bin/unzip/unzip.c
index c9e53f27ed74..937176111a02 100644
--- a/usr.bin/unzip/unzip.c
+++ b/usr.bin/unzip/unzip.c
@@ -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 @@ recheck:
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) {
More information about the dev-commits-src-main
mailing list