Blame libarchive/test/test_read_format_zip_mac_metadata.c

Packit Service 1d0348
/*-
Packit Service 1d0348
 * Copyright (c) 2012 Michihiro NAKAJIMA
Packit Service 1d0348
 * All rights reserved.
Packit Service 1d0348
 *
Packit Service 1d0348
 * Redistribution and use in source and binary forms, with or without
Packit Service 1d0348
 * modification, are permitted provided that the following conditions
Packit Service 1d0348
 * are met:
Packit Service 1d0348
 * 1. Redistributions of source code must retain the above copyright
Packit Service 1d0348
 *    notice, this list of conditions and the following disclaimer.
Packit Service 1d0348
 * 2. Redistributions in binary form must reproduce the above copyright
Packit Service 1d0348
 *    notice, this list of conditions and the following disclaimer in the
Packit Service 1d0348
 *    documentation and/or other materials provided with the distribution.
Packit Service 1d0348
 *
Packit Service 1d0348
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
Packit Service 1d0348
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
Packit Service 1d0348
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
Packit Service 1d0348
 * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
Packit Service 1d0348
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
Packit Service 1d0348
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Packit Service 1d0348
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Packit Service 1d0348
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Packit Service 1d0348
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
Packit Service 1d0348
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit Service 1d0348
 */
Packit Service 1d0348
#include "test.h"
Packit Service 1d0348
__FBSDID("$FreeBSD$");
Packit Service 1d0348
Packit Service 1d0348
/*
Packit Service 1d0348
 * Read a zip file that has a zip comment in the end of the central
Packit Service 1d0348
 * directory record.
Packit Service 1d0348
 */
Packit Service 1d0348
DEFINE_TEST(test_read_format_zip_mac_metadata)
Packit Service 1d0348
{
Packit Service 1d0348
	const char *refname = "test_read_format_zip_mac_metadata.zip";
Packit Service 1d0348
	char *p;
Packit Service 1d0348
	size_t s;
Packit Service 1d0348
	struct archive *a;
Packit Service 1d0348
	struct archive_entry *ae;
Packit Service 1d0348
	const unsigned char appledouble[] = {
Packit Service 1d0348
		0x00, 0x05, 0x16, 0x07, 0x00, 0x02, 0x00, 0x00,
Packit Service 1d0348
		0x4d, 0x61, 0x63, 0x20, 0x4f, 0x53, 0x20, 0x58,
Packit Service 1d0348
		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
Packit Service 1d0348
		0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00,
Packit Service 1d0348
		0x00, 0x32, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00,
Packit Service 1d0348
		0x00, 0x02, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00,
Packit Service 1d0348
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Packit Service 1d0348
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Packit Service 1d0348
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Packit Service 1d0348
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Packit Service 1d0348
		0x00, 0x00, 0x00, 0x00, 0x41, 0x54, 0x54, 0x52,
Packit Service 1d0348
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f,
Packit Service 1d0348
		0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x87,
Packit Service 1d0348
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Packit Service 1d0348
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
Packit Service 1d0348
		0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x87,
Packit Service 1d0348
		0x00, 0x00, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x61,
Packit Service 1d0348
		0x70, 0x70, 0x6c, 0x65, 0x2e, 0x61, 0x63, 0x6c,
Packit Service 1d0348
		0x2e, 0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00,
Packit Service 1d0348
		0x21, 0x23, 0x61, 0x63, 0x6c, 0x20, 0x31, 0x0a,
Packit Service 1d0348
		0x75, 0x73, 0x65, 0x72, 0x3a, 0x46, 0x46, 0x46,
Packit Service 1d0348
		0x46, 0x45, 0x45, 0x45, 0x45, 0x2d, 0x44, 0x44,
Packit Service 1d0348
		0x44, 0x44, 0x2d, 0x43, 0x43, 0x43, 0x43, 0x2d,
Packit Service 1d0348
		0x42, 0x42, 0x42, 0x42, 0x2d, 0x41, 0x41, 0x41,
Packit Service 1d0348
		0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43,
Packit Service 1d0348
		0x39, 0x3a, 0x47, 0x75, 0x65, 0x73, 0x74, 0x3a,
Packit Service 1d0348
		0x32, 0x30, 0x31, 0x3a, 0x64, 0x65, 0x6e, 0x79,
Packit Service 1d0348
		0x3a, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x67, 0x72,
Packit Service 1d0348
		0x6f, 0x75, 0x70, 0x3a, 0x41, 0x42, 0x43, 0x44,
Packit Service 1d0348
		0x45, 0x46, 0x41, 0x42, 0x2d, 0x43, 0x44, 0x45,
Packit Service 1d0348
		0x46, 0x2d, 0x41, 0x42, 0x43, 0x44, 0x2d, 0x45,
Packit Service 1d0348
		0x46, 0x41, 0x42, 0x2d, 0x43, 0x44, 0x45, 0x46,
Packit Service 1d0348
		0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x30,
Packit Service 1d0348
		0x3a, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x3a, 0x38,
Packit Service 1d0348
		0x30, 0x3a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x3a,
Packit Service 1d0348
		0x77, 0x72, 0x69, 0x74, 0x65, 0x0a, 0x00
Packit Service 1d0348
	};
Packit Service 1d0348
Packit Service 1d0348
	extract_reference_file(refname);
Packit Service 1d0348
	p = slurpfile(&s, refname);
Packit Service 1d0348
Packit Service 1d0348
	/* Mac metadata can only be extracted with the seeking reader. */
Packit Service 1d0348
	assert((a = archive_read_new()) != NULL);
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_set_option(a, "zip", "mac-ext", "1"));
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, read_open_memory_seek(a, p, s, 1));
Packit Service 1d0348
Packit Service 1d0348
	if (archive_zlib_version() != NULL) {
Packit Service 1d0348
		assertEqualIntA(a, ARCHIVE_OK,
Packit Service 1d0348
		    archive_read_next_header(a, &ae);;
Packit Service 1d0348
	} else {
Packit Service 1d0348
		assertEqualIntA(a, ARCHIVE_WARN,
Packit Service 1d0348
		    archive_read_next_header(a, &ae);;
Packit Service 1d0348
		assertEqualString(archive_error_string(a),
Packit Service 1d0348
		    "Unsupported ZIP compression method (deflation)");
Packit Service 1d0348
		assert(archive_errno(a) != 0);
Packit Service 1d0348
	}
Packit Service 1d0348
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit Service 1d0348
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
Packit Service 1d0348
	assertEqualString("file3", archive_entry_pathname(ae));
Packit Service 1d0348
	assertEqualInt(AE_IFREG | 0644, archive_entry_mode(ae));
Packit Service 1d0348
	failure("Mac metadata should be set");
Packit Service 1d0348
	if (archive_zlib_version() != NULL) {
Packit Service 1d0348
		const void *metadata;
Packit Service 1d0348
		if (assert((metadata = archive_entry_mac_metadata(ae, &s))
Packit Service 1d0348
		    != NULL)) {
Packit Service 1d0348
			assertEqualMem(metadata, appledouble,
Packit Service 1d0348
			    sizeof(appledouble));
Packit Service 1d0348
		}
Packit Service 1d0348
	} else {
Packit Service 1d0348
		assert(archive_entry_mac_metadata(ae, &s) == NULL);
Packit Service 1d0348
	}
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae);;
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
Packit Service 1d0348
Packit Service 1d0348
	free(p);
Packit Service 1d0348
}