Blame libarchive/test/test_read_format_cab.c

Packit Service 1d0348
/*-
Packit Service 1d0348
 * Copyright (c) 2010 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
Execute the following command to rebuild the data for this program:
Packit Service 1d0348
   tail -n +44 test_read_format_cab.c | /bin/sh
Packit Service 1d0348
And following works are:
Packit Service 1d0348
1. Move /tmp/cab/cab.zip to Windows PC
Packit Service 1d0348
2. Extract cab.zip
Packit Service 1d0348
3. Open command prompt and change current directory where you extracted cab.zip
Packit Service 1d0348
4. Execute cab.bat
Packit Service 1d0348
5. Then you will see that there is a cabinet file, test.cab
Packit Service 1d0348
6. Move test.cab to posix platform
Packit Service 1d0348
7. Extract test.cab with this version of bsdtar
Packit Service 1d0348
8. Execute the following command to make uuencoded files.
Packit Service 1d0348
 uuencode test_read_format_cab_1.cab test_read_format_cab_1.cab > test_read_format_cab_1.cab.uu
Packit Service 1d0348
 uuencode test_read_format_cab_2.cab test_read_format_cab_2.cab > test_read_format_cab_2.cab.uu
Packit Service 1d0348
 uuencode test_read_format_cab_3.cab test_read_format_cab_3.cab > test_read_format_cab_3.cab.uu
Packit Service 1d0348
Packit Service 1d0348
#!/bin/sh
Packit Service 1d0348
#
Packit Service 1d0348
# How to make test data.
Packit Service 1d0348
#
Packit Service 1d0348
# Temporary directory.
Packit Service 1d0348
base=/tmp/cab
Packit Service 1d0348
# Owner id
Packit Service 1d0348
owner=1001
Packit Service 1d0348
# Group id
Packit Service 1d0348
group=1001
Packit Service 1d0348
#
Packit Service 1d0348
# Make contents of a cabinet file.
Packit Service 1d0348
#
Packit Service 1d0348
rm -rf ${base}
Packit Service 1d0348
mkdir ${base}
Packit Service 1d0348
mkdir ${base}/dir1
Packit Service 1d0348
mkdir ${base}/dir2
Packit Service 1d0348
#
Packit Service 1d0348
touch ${base}/empty
Packit Service 1d0348
cat > ${base}/dir1/file1 << END
Packit Service 1d0348
                          file 1 contents
Packit Service 1d0348
hello
Packit Service 1d0348
hello
Packit Service 1d0348
hello
Packit Service 1d0348
END
Packit Service 1d0348
#
Packit Service 1d0348
cat > ${base}/dir2/file2 << END
Packit Service 1d0348
                          file 2 contents
Packit Service 1d0348
hello
Packit Service 1d0348
hello
Packit Service 1d0348
hello
Packit Service 1d0348
hello
Packit Service 1d0348
hello
Packit Service 1d0348
hello
Packit Service 1d0348
END
Packit Service 1d0348
#
Packit Service 1d0348
dd if=/dev/zero of=${base}/zero bs=1 count=33000 > /dev/null 2>&1
Packit Service 1d0348
#
Packit Service 1d0348
cab1=test_read_format_cab_1.cab
Packit Service 1d0348
cab2=test_read_format_cab_2.cab
Packit Service 1d0348
cab3=test_read_format_cab_3.cab
Packit Service 1d0348
#
Packit Service 1d0348
#
Packit Service 1d0348
cat > ${base}/mkcab1 << END
Packit Service 1d0348
.Set Compress=OFF
Packit Service 1d0348
.Set DiskDirectory1=.
Packit Service 1d0348
.Set InfDate=1980-01-02
Packit Service 1d0348
.Set InfTime=00:00:00
Packit Service 1d0348
.Set CabinetName1=${cab1}
Packit Service 1d0348
empty
Packit Service 1d0348
.Set DestinationDir=dir1
Packit Service 1d0348
dir1/file1
Packit Service 1d0348
.Set DestinationDir=dir2
Packit Service 1d0348
dir2/file2
Packit Service 1d0348
END
Packit Service 1d0348
#
Packit Service 1d0348
cat > ${base}/mkcab2 << END
Packit Service 1d0348
.Set CompressionType=MSZIP
Packit Service 1d0348
.Set DiskDirectory1=.
Packit Service 1d0348
.Set InfDate=1980-01-02
Packit Service 1d0348
.Set InfTime=00:00:00
Packit Service 1d0348
.Set CabinetName1=${cab2}
Packit Service 1d0348
empty
Packit Service 1d0348
zero
Packit Service 1d0348
.Set DestinationDir=dir1
Packit Service 1d0348
dir1/file1
Packit Service 1d0348
.Set DestinationDir=dir2
Packit Service 1d0348
dir2/file2
Packit Service 1d0348
END
Packit Service 1d0348
#
Packit Service 1d0348
cat > ${base}/mkcab3 << END
Packit Service 1d0348
.Set CompressionType=LZX
Packit Service 1d0348
.Set DiskDirectory1=.
Packit Service 1d0348
.Set InfDate=1980-01-02
Packit Service 1d0348
.Set InfTime=00:00:00
Packit Service 1d0348
.Set CabinetName1=${cab3}
Packit Service 1d0348
empty
Packit Service 1d0348
zero
Packit Service 1d0348
.Set DestinationDir=dir1
Packit Service 1d0348
dir1/file1
Packit Service 1d0348
.Set DestinationDir=dir2
Packit Service 1d0348
dir2/file2
Packit Service 1d0348
END
Packit Service 1d0348
#
Packit Service 1d0348
cat > ${base}/mkcab4 << END
Packit Service 1d0348
.Set CompressionType=MSZIP
Packit Service 1d0348
.Set DiskDirectory1=.
Packit Service 1d0348
.Set CabinetName1=test.cab
Packit Service 1d0348
${cab1}
Packit Service 1d0348
${cab2}
Packit Service 1d0348
${cab3}
Packit Service 1d0348
END
Packit Service 1d0348
#
Packit Service 1d0348
cat > ${base}/cab.bat << END
Packit Service 1d0348
makecab.exe /F mkcab1
Packit Service 1d0348
makecab.exe /F mkcab2
Packit Service 1d0348
makecab.exe /F mkcab3
Packit Service 1d0348
makecab.exe /F mkcab4
Packit Service 1d0348
del setup.inf setup.rpt
Packit Service 1d0348
del empty zero dir1\file1 dir2\file2 mkcab1 mkcab2 mkcab3 mkcab4
Packit Service 1d0348
del ${cab1} ${cab2} ${cab3}
Packit Service 1d0348
rmdir dir1 dir2
Packit Service 1d0348
END
Packit Service 1d0348
#
Packit Service 1d0348
f=cab.zip
Packit Service 1d0348
(cd ${base}; zip -q -c $f empty zero dir1/file1 dir2/file2 mkcab1 mkcab2 mkcab3 mkcab4 cab.bat)
Packit Service 1d0348
#
Packit Service 1d0348
exit 1
Packit Service 1d0348
*/
Packit Service 1d0348
Packit Service 1d0348
static const char file1[] = {
Packit Service 1d0348
"                          file 1 contents\n"
Packit Service 1d0348
"hello\n"
Packit Service 1d0348
"hello\n"
Packit Service 1d0348
"hello\n"
Packit Service 1d0348
};
Packit Service 1d0348
#define file1_size (sizeof(file1)-1)
Packit Service 1d0348
static const char file2[] = {
Packit Service 1d0348
"                          file 2 contents\n"
Packit Service 1d0348
"hello\n"
Packit Service 1d0348
"hello\n"
Packit Service 1d0348
"hello\n"
Packit Service 1d0348
"hello\n"
Packit Service 1d0348
"hello\n"
Packit Service 1d0348
"hello\n"
Packit Service 1d0348
};
Packit Service 1d0348
#define file2_size (sizeof(file2)-1)
Packit Service 1d0348
Packit Service 1d0348
enum comp_type {
Packit Service 1d0348
	STORE = 0,
Packit Service 1d0348
	MSZIP,
Packit Service 1d0348
	LZX
Packit Service 1d0348
};
Packit Service 1d0348
static void
Packit Service 1d0348
verify(const char *refname, enum comp_type comp)
Packit Service 1d0348
{
Packit Service 1d0348
	struct archive_entry *ae;
Packit Service 1d0348
	struct archive *a;
Packit Service 1d0348
	char buff[128];
Packit Service 1d0348
	char zero[128];
Packit Service 1d0348
	size_t s;
Packit Service 1d0348
Packit Service 1d0348
	memset(zero, 0, sizeof(zero));
Packit Service 1d0348
	extract_reference_file(refname);
Packit Service 1d0348
	assert((a = archive_read_new()) != NULL);
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK,
Packit Service 1d0348
	    archive_read_open_filename(a, refname, 10240));
Packit Service 1d0348
Packit Service 1d0348
	/* Verify regular empty. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit Service 1d0348
	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
Packit Service 1d0348
	assertEqualString("empty", archive_entry_pathname(ae));
Packit Service 1d0348
	assertEqualInt(0, archive_entry_uid(ae));
Packit Service 1d0348
	assertEqualInt(0, archive_entry_gid(ae));
Packit Service 1d0348
	assertEqualInt(0, archive_entry_size(ae));
Packit Service 1d0348
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit Service 1d0348
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit Service 1d0348
Packit Service 1d0348
	if (comp != STORE) {
Packit Service 1d0348
		/* Verify regular zero.
Packit Service 1d0348
		 * Maximum CFDATA size is 32768, so we need over 32768 bytes
Packit Service 1d0348
		 * file to check if we properly handle multiple CFDATA.
Packit Service 1d0348
		 */
Packit Service 1d0348
		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit Service 1d0348
		assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
Packit Service 1d0348
		assertEqualString("zero", archive_entry_pathname(ae));
Packit Service 1d0348
		assertEqualInt(0, archive_entry_uid(ae));
Packit Service 1d0348
		assertEqualInt(0, archive_entry_gid(ae));
Packit Service 1d0348
		assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit Service 1d0348
		assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit Service 1d0348
		assertEqualInt(33000, archive_entry_size(ae));
Packit Service 1d0348
		for (s = 0; s + sizeof(buff) < 33000; s+= sizeof(buff)) {
Packit Service 1d0348
			ssize_t rsize = archive_read_data(a, buff, sizeof(buff));
Packit Service 1d0348
			if (comp == MSZIP && rsize == ARCHIVE_FATAL && archive_zlib_version() == NULL) {
Packit Service 1d0348
				skipping("Skipping CAB format(MSZIP) check: %s",
Packit Service 1d0348
				    archive_error_string(a));
Packit Service 1d0348
				goto finish;
Packit Service 1d0348
			}
Packit Service 1d0348
			assertEqualInt(sizeof(buff), rsize);
Packit Service 1d0348
			assertEqualMem(buff, zero, sizeof(buff));
Packit Service 1d0348
		}
Packit Service 1d0348
		assertEqualInt(33000 - s, archive_read_data(a, buff, 33000 - s));
Packit Service 1d0348
		assertEqualMem(buff, zero, 33000 - s);
Packit Service 1d0348
	}
Packit Service 1d0348
Packit Service 1d0348
	/* Verify regular file1. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit Service 1d0348
	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
Packit Service 1d0348
	assertEqualString("dir1/file1", archive_entry_pathname(ae));
Packit Service 1d0348
	assertEqualInt(0, archive_entry_uid(ae));
Packit Service 1d0348
	assertEqualInt(0, archive_entry_gid(ae));
Packit Service 1d0348
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit Service 1d0348
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit Service 1d0348
	assertEqualInt(file1_size, archive_entry_size(ae));
Packit Service 1d0348
	assertEqualInt(file1_size, archive_read_data(a, buff, file1_size));
Packit Service 1d0348
	assertEqualMem(buff, file1, file1_size);
Packit Service 1d0348
Packit Service 1d0348
	/* Verify regular file2. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit Service 1d0348
	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
Packit Service 1d0348
	assertEqualString("dir2/file2", archive_entry_pathname(ae));
Packit Service 1d0348
	assertEqualInt(0, archive_entry_uid(ae));
Packit Service 1d0348
	assertEqualInt(0, archive_entry_gid(ae));
Packit Service 1d0348
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit Service 1d0348
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit Service 1d0348
	assertEqualInt(file2_size, archive_entry_size(ae));
Packit Service 1d0348
	assertEqualInt(file2_size, archive_read_data(a, buff, file2_size));
Packit Service 1d0348
	assertEqualMem(buff, file2, file2_size);
Packit Service 1d0348
Packit Service 1d0348
	/* End of archive. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae);;
Packit Service 1d0348
Packit Service 1d0348
	if (comp != STORE) {
Packit Service 1d0348
		assertEqualInt(4, archive_file_count(a));
Packit Service 1d0348
	} else {
Packit Service 1d0348
		assertEqualInt(3, archive_file_count(a));
Packit Service 1d0348
	}
Packit Service 1d0348
Packit Service 1d0348
	/* Verify archive format. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_FORMAT_CAB, archive_format(a));
Packit Service 1d0348
Packit Service 1d0348
	/* Close the archive. */
Packit Service 1d0348
finish:
Packit Service 1d0348
	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
Packit Service 1d0348
	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
/*
Packit Service 1d0348
 * Skip beginning files and Read the last file.
Packit Service 1d0348
 */
Packit Service 1d0348
static void
Packit Service 1d0348
verify2(const char *refname, enum comp_type comp)
Packit Service 1d0348
{
Packit Service 1d0348
	struct archive_entry *ae;
Packit Service 1d0348
	struct archive *a;
Packit Service 1d0348
	char buff[128];
Packit Service 1d0348
	char zero[128];
Packit Service 1d0348
Packit Service 1d0348
	if (comp == MSZIP && archive_zlib_version() == NULL) {
Packit Service 1d0348
		skipping("Skipping CAB format(MSZIP) check for %s",
Packit Service 1d0348
		  refname);
Packit Service 1d0348
		return;
Packit Service 1d0348
	}
Packit Service 1d0348
	memset(zero, 0, sizeof(zero));
Packit Service 1d0348
	extract_reference_file(refname);
Packit Service 1d0348
	assert((a = archive_read_new()) != NULL);
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK,
Packit Service 1d0348
	    archive_read_open_filename(a, refname, 10240));
Packit Service 1d0348
Packit Service 1d0348
	/* Verify regular empty. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit Service 1d0348
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit Service 1d0348
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit Service 1d0348
	if (comp != STORE) {
Packit Service 1d0348
		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit Service 1d0348
		assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit Service 1d0348
		assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit Service 1d0348
	}
Packit Service 1d0348
	/* Verify regular file1. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit Service 1d0348
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit Service 1d0348
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit Service 1d0348
Packit Service 1d0348
	/* Verify regular file2. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit Service 1d0348
	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
Packit Service 1d0348
	assertEqualString("dir2/file2", archive_entry_pathname(ae));
Packit Service 1d0348
	assertEqualInt(0, archive_entry_uid(ae));
Packit Service 1d0348
	assertEqualInt(0, archive_entry_gid(ae));
Packit Service 1d0348
	assertEqualInt(file2_size, archive_entry_size(ae));
Packit Service 1d0348
	assertEqualInt(file2_size, archive_read_data(a, buff, file2_size));
Packit Service 1d0348
	assertEqualMem(buff, file2, file2_size);
Packit Service 1d0348
Packit Service 1d0348
	/* End of archive. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae);;
Packit Service 1d0348
Packit Service 1d0348
	if (comp != STORE) {
Packit Service 1d0348
		assertEqualInt(4, archive_file_count(a));
Packit Service 1d0348
	} else {
Packit Service 1d0348
		assertEqualInt(3, archive_file_count(a));
Packit Service 1d0348
	}
Packit Service 1d0348
Packit Service 1d0348
	/* Verify archive format. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_FORMAT_CAB, archive_format(a));
Packit Service 1d0348
Packit Service 1d0348
	/* Close the archive. */
Packit Service 1d0348
	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
Packit Service 1d0348
	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
/*
Packit Service 1d0348
 * Skip all file like 'bsdtar tvf foo.cab'.
Packit Service 1d0348
 */
Packit Service 1d0348
static void
Packit Service 1d0348
verify3(const char *refname, enum comp_type comp)
Packit Service 1d0348
{
Packit Service 1d0348
	struct archive_entry *ae;
Packit Service 1d0348
	struct archive *a;
Packit Service 1d0348
	char zero[128];
Packit Service 1d0348
Packit Service 1d0348
	memset(zero, 0, sizeof(zero));
Packit Service 1d0348
	extract_reference_file(refname);
Packit Service 1d0348
	assert((a = archive_read_new()) != NULL);
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK,
Packit Service 1d0348
	    archive_read_open_filename(a, refname, 10240));
Packit Service 1d0348
Packit Service 1d0348
	/* Verify regular empty. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit Service 1d0348
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit Service 1d0348
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit Service 1d0348
	if (comp != STORE) {
Packit Service 1d0348
		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit Service 1d0348
		assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit Service 1d0348
		assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit Service 1d0348
	}
Packit Service 1d0348
	/* Verify regular file1. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit Service 1d0348
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit Service 1d0348
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit Service 1d0348
Packit Service 1d0348
	/* Verify regular file2. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit Service 1d0348
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit Service 1d0348
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit Service 1d0348
Packit Service 1d0348
	/* End of archive. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae);;
Packit Service 1d0348
Packit Service 1d0348
	if (comp != STORE) {
Packit Service 1d0348
		assertEqualInt(4, archive_file_count(a));
Packit Service 1d0348
	} else {
Packit Service 1d0348
		assertEqualInt(3, archive_file_count(a));
Packit Service 1d0348
	}
Packit Service 1d0348
Packit Service 1d0348
	/* Verify archive format. */
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
Packit Service 1d0348
	assertEqualIntA(a, ARCHIVE_FORMAT_CAB, archive_format(a));
Packit Service 1d0348
Packit Service 1d0348
	/* Close the archive. */
Packit Service 1d0348
	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
Packit Service 1d0348
	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
DEFINE_TEST(test_read_format_cab)
Packit Service 1d0348
{
Packit Service 1d0348
	/* Verify Cabinet file in no compression. */
Packit Service 1d0348
	verify("test_read_format_cab_1.cab", STORE);
Packit Service 1d0348
	verify2("test_read_format_cab_1.cab", STORE);
Packit Service 1d0348
	verify3("test_read_format_cab_1.cab", STORE);
Packit Service 1d0348
	/* Verify Cabinet file in MSZIP. */
Packit Service 1d0348
	verify("test_read_format_cab_2.cab", MSZIP);
Packit Service 1d0348
	verify2("test_read_format_cab_2.cab", MSZIP);
Packit Service 1d0348
	verify3("test_read_format_cab_2.cab", MSZIP);
Packit Service 1d0348
	/* Verify Cabinet file in LZX. */
Packit Service 1d0348
	verify("test_read_format_cab_3.cab", LZX);
Packit Service 1d0348
	verify2("test_read_format_cab_3.cab", LZX);
Packit Service 1d0348
	verify3("test_read_format_cab_3.cab", LZX);
Packit Service 1d0348
}
Packit Service 1d0348