MFC r179789: Never match dirs as hardlinks.
This commit is contained in:
parent
175640c4dc
commit
8c1cf2459a
@ -181,6 +181,9 @@ archive_entry_linkify(struct archive_entry_linkresolver *res,
|
||||
/* If it has only one link, then we're done. */
|
||||
if (archive_entry_nlink(*e) == 1)
|
||||
return;
|
||||
/* Directories never have hardlinks. */
|
||||
if (archive_entry_filetype(*e) == AE_IFDIR)
|
||||
return;
|
||||
|
||||
switch (res->strategy) {
|
||||
case ARCHIVE_ENTRY_LINKIFY_LIKE_TAR:
|
||||
|
@ -68,6 +68,24 @@ static void test_linkify_tar(void)
|
||||
assertEqualInt(0, archive_entry_size(entry));
|
||||
|
||||
|
||||
/* Dirs should never be matched as hardlinks, regardless. */
|
||||
archive_entry_set_pathname(entry, "test3");
|
||||
archive_entry_set_nlink(entry, 2);
|
||||
archive_entry_set_filetype(entry, AE_IFDIR);
|
||||
archive_entry_set_ino(entry, 3);
|
||||
archive_entry_set_hardlink(entry, NULL);
|
||||
archive_entry_linkify(resolver, &entry, &e2);
|
||||
/* Shouldn't be altered, since it wasn't seen before. */
|
||||
assert(e2 == NULL);
|
||||
assertEqualString("test3", archive_entry_pathname(entry));
|
||||
assertEqualString(NULL, archive_entry_hardlink(entry));
|
||||
|
||||
/* Dir, so it shouldn't get matched. */
|
||||
archive_entry_linkify(resolver, &entry, &e2);
|
||||
assert(e2 == NULL);
|
||||
assertEqualString("test3", archive_entry_pathname(entry));
|
||||
assertEqualString(NULL, archive_entry_hardlink(entry));
|
||||
|
||||
archive_entry_free(entry);
|
||||
archive_entry_linkresolver_free(resolver);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user