]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Skip hardlinks pointing to itself and issue a warning
authorMartin Matuska <martin@matuska.org>
Tue, 9 Jun 2020 05:06:32 +0000 (07:06 +0200)
committerMartin Matuska <martin@matuska.org>
Tue, 9 Jun 2020 05:10:59 +0000 (07:10 +0200)
Fixes #1381

libarchive/archive_write_disk_posix.c

index 0168d0d411bd2ba8159e40ab9d58273f689a7b0e..2f86222ce1563e6f3bef5c0eb468484bde86e185 100644 (file)
@@ -546,6 +546,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
 {
        struct archive_write_disk *a = (struct archive_write_disk *)_a;
        struct fixup_entry *fe;
+       const char *linkname;
        int ret, r;
 
        archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC,
@@ -590,6 +591,17 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
        if (ret != ARCHIVE_OK)
                return (ret);
 
+       /*
+        * Check if we have a hardlink that points to itself.
+        */
+       linkname = archive_entry_hardlink(a->entry);
+       if (linkname != NULL && strcmp(a->name, linkname) == 0) {
+               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+                   "Skipping hardlink pointing to itself: %s",
+                   a->name);
+               return (ARCHIVE_WARN);
+       }
+
        /*
         * Query the umask so we get predictable mode settings.
         * This gets done on every call to _write_header in case the