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-all mailing list