The branch main has been updated by nyan:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=0cdfa4956424dc816944a84568a4d9900b68f5e3

commit 0cdfa4956424dc816944a84568a4d9900b68f5e3
Author:     Yoshihiro Takahashi <n...@freebsd.org>
AuthorDate: 2021-01-02 01:50:08 +0000
Commit:     Yoshihiro Takahashi <n...@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) {
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to