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:
Tim Kientzle authored and Martin Matuska committed 2026-06-23 10:28:31 +02:00
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);
}
+48
View File
@@ -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[] =