Merge pull request #3028 from br0nzu/xar-fstype-cleanup
Free XAR xattr fstype metadata during cleanup
(cherry picked from commit 27b08f61da)
This commit is contained in:
1 parent
66ac5d3ce8
commit
ea38c9f442
2 files changed
+49
No files matched your search
@@ -1860,6 +1860,7 @@ static void
|
||||
xattr_free(struct xattr *xattr)
|
||||
{
|
||||
archive_string_free(&(xattr->name));
|
||||
archive_string_free(&(xattr->fstype));
|
||||
free(xattr);
|
||||
}
|
||||
|
||||
|
||||
@@ -724,6 +724,24 @@ static unsigned char archive13[] = {
|
||||
0xce,0xac,0xe0,0x02,0x00,0x20,0xfa,0x04,0xc5
|
||||
};
|
||||
|
||||
static unsigned char archive14_xattr_fstype[] = {
|
||||
0x78,0x61,0x72,0x21,0x00,0x1c,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc2,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x22,0x00,0x00,0x00,0x00,0x78,0x9c,0x3d,0x8f,
|
||||
0x41,0x8e,0xc2,0x30,0x0c,0x45,0xf7,0x3d,0x45,0x94,0x3d,0x75,0x47,0x42,0x68,0x16,
|
||||
0xbf,0x61,0x37,0x27,0x18,0x0e,0x10,0xb5,0x4e,0x89,0x94,0x26,0x55,0xe3,0x41,0xc0,
|
||||
0xe9,0x49,0x4a,0x99,0xd5,0x7f,0x96,0x6d,0xe9,0x7d,0x9c,0xef,0x73,0x50,0x37,0x5e,
|
||||
0xb3,0x4f,0xb1,0xd7,0x5f,0x6d,0xa7,0x15,0xc7,0x21,0x8d,0x3e,0x4e,0xbd,0xbe,0xfc,
|
||||
0xfe,0x1c,0xbe,0xf5,0xd9,0x34,0xb8,0xdb,0xd5,0x40,0xd2,0x50,0xd0,0xf9,0xc0,0xca,
|
||||
0x8f,0xe5,0x58,0x1b,0x44,0x3b,0xb3,0x71,0xa0,0x2d,0x21,0x8f,0xa5,0x4c,0x65,0x0f,
|
||||
0xda,0x10,0x73,0x1a,0xd9,0x74,0xa7,0xe3,0x11,0xb4,0x61,0xa3,0x14,0xd8,0xfe,0x7f,
|
||||
0x07,0x8e,0x93,0x5c,0x4d,0xd9,0xee,0x84,0xe4,0x5c,0x66,0x31,0x1d,0x68,0x27,0x64,
|
||||
0xff,0xe4,0x7a,0xb1,0x25,0x3e,0x6e,0x2a,0xcb,0x23,0x70,0xaf,0xed,0xb2,0x04,0x3f,
|
||||
0x58,0x29,0xf6,0x94,0x06,0x61,0x39,0x64,0x59,0xd9,0xce,0x9a,0x76,0xb7,0xbf,0xcc,
|
||||
0x6b,0xeb,0x72,0xd5,0xf9,0x58,0xbe,0x27,0x73,0x75,0x19,0xb4,0x33,0x88,0x6d,0xa9,
|
||||
0x46,0xd5,0xbd,0x66,0x6d,0x0a,0xaa,0xa5,0x9b,0x17,0xc3,0xba,0x60,0xaa,0x44,0x41,
|
||||
0x54,0x41
|
||||
};
|
||||
|
||||
enum enc {
|
||||
GZIP,
|
||||
BZIP2
|
||||
@@ -844,6 +862,30 @@ static void verifyB(unsigned char *d, size_t s) {
|
||||
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
|
||||
}
|
||||
|
||||
static void verify_xattr_fstype_cleanup(unsigned char *d, size_t s)
|
||||
{
|
||||
struct archive_entry *ae;
|
||||
struct archive *a;
|
||||
int r;
|
||||
|
||||
assert((a = archive_read_new()) != NULL);
|
||||
assertA(0 == archive_read_support_filter_all(a));
|
||||
r = archive_read_support_format_xar(a);
|
||||
if (r == ARCHIVE_WARN) {
|
||||
skipping("xar reading not fully supported on this platform");
|
||||
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
|
||||
return;
|
||||
}
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, d, s));
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualString("f", archive_entry_pathname(ae));
|
||||
assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &ae));
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
|
||||
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
|
||||
}
|
||||
|
||||
DEFINE_TEST(test_read_format_xar)
|
||||
{
|
||||
verify(archive1, sizeof(archive1), verify0, verify1, GZIP);
|
||||
@@ -861,6 +903,12 @@ DEFINE_TEST(test_read_format_xar)
|
||||
verifyB(archive13, sizeof(archive13));
|
||||
}
|
||||
|
||||
DEFINE_TEST(test_read_format_xar_xattr_fstype_cleanup)
|
||||
{
|
||||
verify_xattr_fstype_cleanup(archive14_xattr_fstype,
|
||||
sizeof(archive14_xattr_fstype));
|
||||
}
|
||||
|
||||
DEFINE_TEST(test_read_format_xar_duplicate_filename_node)
|
||||
{
|
||||
static const char *reffiles[] =
|
||||
|
||||
Reference in new issue
Block a user