summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorkientzle <kientzle@FreeBSD.org>2008-03-12 04:47:37 +0000
committerkientzle <kientzle@FreeBSD.org>2008-03-12 04:47:37 +0000
commit9f91e7f3cf1ce14deeef1879546880d239c89fb9 (patch)
tree309fa0359f1dbfded8f59b056fb74869333a8777 /lib
parent06452801ddae83bdd93ac129baa2dad853f6a395 (diff)
downloadFreeBSD-src-9f91e7f3cf1ce14deeef1879546880d239c89fb9.zip
FreeBSD-src-9f91e7f3cf1ce14deeef1879546880d239c89fb9.tar.gz
Tighten up the semantics of acl_next() and xattr_next() when you
hit the end of the ACL or xattr list. Thanks to: Jeff Johnson for pointing out the obvious typo
Diffstat (limited to 'lib')
-rw-r--r--lib/libarchive/archive_entry.c5
-rw-r--r--lib/libarchive/test/test_entry.c22
2 files changed, 27 insertions, 0 deletions
diff --git a/lib/libarchive/archive_entry.c b/lib/libarchive/archive_entry.c
index d0fe717..8ca69fe 100644
--- a/lib/libarchive/archive_entry.c
+++ b/lib/libarchive/archive_entry.c
@@ -1124,6 +1124,11 @@ archive_entry_acl_next(struct archive_entry *entry, int want_type, int *type,
entry->acl_p = entry->acl_p->next;
if (entry->acl_p == NULL) {
entry->acl_state = 0;
+ *type = 0;
+ *permset = 0;
+ *tag = 0;
+ *id = -1;
+ *name = NULL;
return (ARCHIVE_EOF); /* End of ACL entries. */
}
*type = entry->acl_p->type;
diff --git a/lib/libarchive/test/test_entry.c b/lib/libarchive/test/test_entry.c
index e829b25..3841ce4 100644
--- a/lib/libarchive/test/test_entry.c
+++ b/lib/libarchive/test/test_entry.c
@@ -213,10 +213,16 @@ DEFINE_TEST(test_entry)
assertEqualInt(1, archive_entry_xattr_count(e));
assertEqualInt(ARCHIVE_WARN,
archive_entry_xattr_next(e, &xname, &xval, &xsize));
+ assertEqualString(xname, NULL);
+ assertEqualString(xval, NULL);
+ assertEqualInt(xsize, 0);
archive_entry_xattr_clear(e);
assertEqualInt(0, archive_entry_xattr_reset(e));
assertEqualInt(ARCHIVE_WARN,
archive_entry_xattr_next(e, &xname, &xval, &xsize));
+ assertEqualString(xname, NULL);
+ assertEqualString(xval, NULL);
+ assertEqualInt(xsize, 0);
archive_entry_xattr_add_entry(e, "xattr1", "xattrvalue1", 12);
assertEqualInt(1, archive_entry_xattr_reset(e));
archive_entry_xattr_add_entry(e, "xattr2", "xattrvalue2", 12);
@@ -225,6 +231,9 @@ DEFINE_TEST(test_entry)
assertEqualInt(0, archive_entry_xattr_next(e, &xname, &xval, &xsize));
assertEqualInt(ARCHIVE_WARN,
archive_entry_xattr_next(e, &xname, &xval, &xsize));
+ assertEqualString(xname, NULL);
+ assertEqualString(xval, NULL);
+ assertEqualInt(xsize, 0);
/*
@@ -348,6 +357,11 @@ DEFINE_TEST(test_entry)
assertEqualString(xname, "xattr1");
assertEqualString(xval, "xattrvalue");
assertEqualInt(xsize, 11);
+ assertEqualInt(ARCHIVE_WARN,
+ archive_entry_xattr_next(e2, &xname, &xval, &xsize));
+ assertEqualString(xname, NULL);
+ assertEqualString(xval, NULL);
+ assertEqualInt(xsize, 0);
#endif
/* Change the original */
@@ -453,6 +467,14 @@ DEFINE_TEST(test_entry)
assertEqualInt(tag, ARCHIVE_ENTRY_ACL_USER);
assertEqualInt(qual, 77);
assertEqualString(name, "user77");
+ assertEqualInt(1, archive_entry_acl_next(e2,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ &type, &permset, &tag, &qual, &name));
+ assertEqualInt(type, 0);
+ assertEqualInt(permset, 0);
+ assertEqualInt(tag, 0);
+ assertEqualInt(qual, -1);
+ assertEqualString(name, NULL);
#endif
#if ARCHIVE_VERSION_STAMP < 1009000
skipping("xattr preserved in archive_entry copy");
OpenPOWER on IntegriCloud