Blame libarchive/test/test_read_format_cab.c

Packit 08bd4c
/*-
Packit 08bd4c
 * Copyright (c) 2010 Michihiro NAKAJIMA
Packit 08bd4c
 * All rights reserved.
Packit 08bd4c
 *
Packit 08bd4c
 * Redistribution and use in source and binary forms, with or without
Packit 08bd4c
 * modification, are permitted provided that the following conditions
Packit 08bd4c
 * are met:
Packit 08bd4c
 * 1. Redistributions of source code must retain the above copyright
Packit 08bd4c
 *    notice, this list of conditions and the following disclaimer.
Packit 08bd4c
 * 2. Redistributions in binary form must reproduce the above copyright
Packit 08bd4c
 *    notice, this list of conditions and the following disclaimer in the
Packit 08bd4c
 *    documentation and/or other materials provided with the distribution.
Packit 08bd4c
 *
Packit 08bd4c
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
Packit 08bd4c
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
Packit 08bd4c
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
Packit 08bd4c
 * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
Packit 08bd4c
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
Packit 08bd4c
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Packit 08bd4c
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Packit 08bd4c
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Packit 08bd4c
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
Packit 08bd4c
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit 08bd4c
 */
Packit 08bd4c
#include "test.h"
Packit 08bd4c
__FBSDID("$FreeBSD");
Packit 08bd4c
Packit 08bd4c
/*
Packit 08bd4c
Execute the following command to rebuild the data for this program:
Packit 08bd4c
   tail -n +44 test_read_format_cab.c | /bin/sh
Packit 08bd4c
And following works are:
Packit 08bd4c
1. Move /tmp/cab/cab.zip to Windows PC
Packit 08bd4c
2. Extract cab.zip
Packit 08bd4c
3. Open command prompt and change current directory where you extracted cab.zip
Packit 08bd4c
4. Execute cab.bat
Packit 08bd4c
5. Then you will see that there is a cabinet file, test.cab
Packit 08bd4c
6. Move test.cab to posix platform
Packit 08bd4c
7. Extract test.cab with this version of bsdtar
Packit 08bd4c
8. Execute the following command to make uuencoded files.
Packit 08bd4c
 uuencode test_read_format_cab_1.cab test_read_format_cab_1.cab > test_read_format_cab_1.cab.uu
Packit 08bd4c
 uuencode test_read_format_cab_2.cab test_read_format_cab_2.cab > test_read_format_cab_2.cab.uu
Packit 08bd4c
 uuencode test_read_format_cab_3.cab test_read_format_cab_3.cab > test_read_format_cab_3.cab.uu
Packit 08bd4c
Packit 08bd4c
#!/bin/sh
Packit 08bd4c
#
Packit 08bd4c
# How to make test data.
Packit 08bd4c
#
Packit 08bd4c
# Temporary directory.
Packit 08bd4c
base=/tmp/cab
Packit 08bd4c
# Owner id
Packit 08bd4c
owner=1001
Packit 08bd4c
# Group id
Packit 08bd4c
group=1001
Packit 08bd4c
#
Packit 08bd4c
# Make contents of a cabinet file.
Packit 08bd4c
#
Packit 08bd4c
rm -rf ${base}
Packit 08bd4c
mkdir ${base}
Packit 08bd4c
mkdir ${base}/dir1
Packit 08bd4c
mkdir ${base}/dir2
Packit 08bd4c
#
Packit 08bd4c
touch ${base}/empty
Packit 08bd4c
cat > ${base}/dir1/file1 << END
Packit 08bd4c
                          file 1 contents
Packit 08bd4c
hello
Packit 08bd4c
hello
Packit 08bd4c
hello
Packit 08bd4c
END
Packit 08bd4c
#
Packit 08bd4c
cat > ${base}/dir2/file2 << END
Packit 08bd4c
                          file 2 contents
Packit 08bd4c
hello
Packit 08bd4c
hello
Packit 08bd4c
hello
Packit 08bd4c
hello
Packit 08bd4c
hello
Packit 08bd4c
hello
Packit 08bd4c
END
Packit 08bd4c
#
Packit 08bd4c
dd if=/dev/zero of=${base}/zero bs=1 count=33000 > /dev/null 2>&1
Packit 08bd4c
#
Packit 08bd4c
cab1=test_read_format_cab_1.cab
Packit 08bd4c
cab2=test_read_format_cab_2.cab
Packit 08bd4c
cab3=test_read_format_cab_3.cab
Packit 08bd4c
#
Packit 08bd4c
#
Packit 08bd4c
cat > ${base}/mkcab1 << END
Packit 08bd4c
.Set Compress=OFF
Packit 08bd4c
.Set DiskDirectory1=.
Packit 08bd4c
.Set InfDate=1980-01-02
Packit 08bd4c
.Set InfTime=00:00:00
Packit 08bd4c
.Set CabinetName1=${cab1}
Packit 08bd4c
empty
Packit 08bd4c
.Set DestinationDir=dir1
Packit 08bd4c
dir1/file1
Packit 08bd4c
.Set DestinationDir=dir2
Packit 08bd4c
dir2/file2
Packit 08bd4c
END
Packit 08bd4c
#
Packit 08bd4c
cat > ${base}/mkcab2 << END
Packit 08bd4c
.Set CompressionType=MSZIP
Packit 08bd4c
.Set DiskDirectory1=.
Packit 08bd4c
.Set InfDate=1980-01-02
Packit 08bd4c
.Set InfTime=00:00:00
Packit 08bd4c
.Set CabinetName1=${cab2}
Packit 08bd4c
empty
Packit 08bd4c
zero
Packit 08bd4c
.Set DestinationDir=dir1
Packit 08bd4c
dir1/file1
Packit 08bd4c
.Set DestinationDir=dir2
Packit 08bd4c
dir2/file2
Packit 08bd4c
END
Packit 08bd4c
#
Packit 08bd4c
cat > ${base}/mkcab3 << END
Packit 08bd4c
.Set CompressionType=LZX
Packit 08bd4c
.Set DiskDirectory1=.
Packit 08bd4c
.Set InfDate=1980-01-02
Packit 08bd4c
.Set InfTime=00:00:00
Packit 08bd4c
.Set CabinetName1=${cab3}
Packit 08bd4c
empty
Packit 08bd4c
zero
Packit 08bd4c
.Set DestinationDir=dir1
Packit 08bd4c
dir1/file1
Packit 08bd4c
.Set DestinationDir=dir2
Packit 08bd4c
dir2/file2
Packit 08bd4c
END
Packit 08bd4c
#
Packit 08bd4c
cat > ${base}/mkcab4 << END
Packit 08bd4c
.Set CompressionType=MSZIP
Packit 08bd4c
.Set DiskDirectory1=.
Packit 08bd4c
.Set CabinetName1=test.cab
Packit 08bd4c
${cab1}
Packit 08bd4c
${cab2}
Packit 08bd4c
${cab3}
Packit 08bd4c
END
Packit 08bd4c
#
Packit 08bd4c
cat > ${base}/cab.bat << END
Packit 08bd4c
makecab.exe /F mkcab1
Packit 08bd4c
makecab.exe /F mkcab2
Packit 08bd4c
makecab.exe /F mkcab3
Packit 08bd4c
makecab.exe /F mkcab4
Packit 08bd4c
del setup.inf setup.rpt
Packit 08bd4c
del empty zero dir1\file1 dir2\file2 mkcab1 mkcab2 mkcab3 mkcab4
Packit 08bd4c
del ${cab1} ${cab2} ${cab3}
Packit 08bd4c
rmdir dir1 dir2
Packit 08bd4c
END
Packit 08bd4c
#
Packit 08bd4c
f=cab.zip
Packit 08bd4c
(cd ${base}; zip -q -c $f empty zero dir1/file1 dir2/file2 mkcab1 mkcab2 mkcab3 mkcab4 cab.bat)
Packit 08bd4c
#
Packit 08bd4c
exit 1
Packit 08bd4c
*/
Packit 08bd4c
Packit 08bd4c
static const char file1[] = {
Packit 08bd4c
"                          file 1 contents\n"
Packit 08bd4c
"hello\n"
Packit 08bd4c
"hello\n"
Packit 08bd4c
"hello\n"
Packit 08bd4c
};
Packit 08bd4c
#define file1_size (sizeof(file1)-1)
Packit 08bd4c
static const char file2[] = {
Packit 08bd4c
"                          file 2 contents\n"
Packit 08bd4c
"hello\n"
Packit 08bd4c
"hello\n"
Packit 08bd4c
"hello\n"
Packit 08bd4c
"hello\n"
Packit 08bd4c
"hello\n"
Packit 08bd4c
"hello\n"
Packit 08bd4c
};
Packit 08bd4c
#define file2_size (sizeof(file2)-1)
Packit 08bd4c
Packit 08bd4c
enum comp_type {
Packit 08bd4c
	STORE = 0,
Packit 08bd4c
	MSZIP,
Packit 08bd4c
	LZX
Packit 08bd4c
};
Packit 08bd4c
static void
Packit 08bd4c
verify(const char *refname, enum comp_type comp)
Packit 08bd4c
{
Packit 08bd4c
	struct archive_entry *ae;
Packit 08bd4c
	struct archive *a;
Packit 08bd4c
	char buff[128];
Packit 08bd4c
	char zero[128];
Packit 08bd4c
	size_t s;
Packit 08bd4c
Packit 08bd4c
	memset(zero, 0, sizeof(zero));
Packit 08bd4c
	extract_reference_file(refname);
Packit 08bd4c
	assert((a = archive_read_new()) != NULL);
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK,
Packit 08bd4c
	    archive_read_open_filename(a, refname, 10240));
Packit 08bd4c
Packit 08bd4c
	/* Verify regular empty. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit 08bd4c
	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
Packit 08bd4c
	assertEqualString("empty", archive_entry_pathname(ae));
Packit 08bd4c
	assertEqualInt(0, archive_entry_uid(ae));
Packit 08bd4c
	assertEqualInt(0, archive_entry_gid(ae));
Packit 08bd4c
	assertEqualInt(0, archive_entry_size(ae));
Packit 08bd4c
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit 08bd4c
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit 08bd4c
Packit 08bd4c
	if (comp != STORE) {
Packit 08bd4c
		/* Verify regular zero.
Packit 08bd4c
		 * Maximum CFDATA size is 32768, so we need over 32768 bytes
Packit 08bd4c
		 * file to check if we properly handle multiple CFDATA.
Packit 08bd4c
		 */
Packit 08bd4c
		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit 08bd4c
		assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
Packit 08bd4c
		assertEqualString("zero", archive_entry_pathname(ae));
Packit 08bd4c
		assertEqualInt(0, archive_entry_uid(ae));
Packit 08bd4c
		assertEqualInt(0, archive_entry_gid(ae));
Packit 08bd4c
		assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit 08bd4c
		assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit 08bd4c
		assertEqualInt(33000, archive_entry_size(ae));
Packit 08bd4c
		for (s = 0; s + sizeof(buff) < 33000; s+= sizeof(buff)) {
Packit 08bd4c
			ssize_t rsize = archive_read_data(a, buff, sizeof(buff));
Packit 08bd4c
			if (comp == MSZIP && rsize == ARCHIVE_FATAL && archive_zlib_version() == NULL) {
Packit 08bd4c
				skipping("Skipping CAB format(MSZIP) check: %s",
Packit 08bd4c
				    archive_error_string(a));
Packit 08bd4c
				goto finish;
Packit 08bd4c
			}
Packit 08bd4c
			assertEqualInt(sizeof(buff), rsize);
Packit 08bd4c
			assertEqualMem(buff, zero, sizeof(buff));
Packit 08bd4c
		}
Packit 08bd4c
		assertEqualInt(33000 - s, archive_read_data(a, buff, 33000 - s));
Packit 08bd4c
		assertEqualMem(buff, zero, 33000 - s);
Packit 08bd4c
	}
Packit 08bd4c
Packit 08bd4c
	/* Verify regular file1. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit 08bd4c
	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
Packit 08bd4c
	assertEqualString("dir1/file1", archive_entry_pathname(ae));
Packit 08bd4c
	assertEqualInt(0, archive_entry_uid(ae));
Packit 08bd4c
	assertEqualInt(0, archive_entry_gid(ae));
Packit 08bd4c
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit 08bd4c
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit 08bd4c
	assertEqualInt(file1_size, archive_entry_size(ae));
Packit 08bd4c
	assertEqualInt(file1_size, archive_read_data(a, buff, file1_size));
Packit 08bd4c
	assertEqualMem(buff, file1, file1_size);
Packit 08bd4c
Packit 08bd4c
	/* Verify regular file2. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit 08bd4c
	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
Packit 08bd4c
	assertEqualString("dir2/file2", archive_entry_pathname(ae));
Packit 08bd4c
	assertEqualInt(0, archive_entry_uid(ae));
Packit 08bd4c
	assertEqualInt(0, archive_entry_gid(ae));
Packit 08bd4c
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit 08bd4c
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit 08bd4c
	assertEqualInt(file2_size, archive_entry_size(ae));
Packit 08bd4c
	assertEqualInt(file2_size, archive_read_data(a, buff, file2_size));
Packit 08bd4c
	assertEqualMem(buff, file2, file2_size);
Packit 08bd4c
Packit 08bd4c
	/* End of archive. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae);;
Packit 08bd4c
Packit 08bd4c
	if (comp != STORE) {
Packit 08bd4c
		assertEqualInt(4, archive_file_count(a));
Packit 08bd4c
	} else {
Packit 08bd4c
		assertEqualInt(3, archive_file_count(a));
Packit 08bd4c
	}
Packit 08bd4c
Packit 08bd4c
	/* Verify archive format. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_FORMAT_CAB, archive_format(a));
Packit 08bd4c
Packit 08bd4c
	/* Close the archive. */
Packit 08bd4c
finish:
Packit 08bd4c
	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
Packit 08bd4c
	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
Packit 08bd4c
}
Packit 08bd4c
Packit 08bd4c
/*
Packit 08bd4c
 * Skip beginning files and Read the last file.
Packit 08bd4c
 */
Packit 08bd4c
static void
Packit 08bd4c
verify2(const char *refname, enum comp_type comp)
Packit 08bd4c
{
Packit 08bd4c
	struct archive_entry *ae;
Packit 08bd4c
	struct archive *a;
Packit 08bd4c
	char buff[128];
Packit 08bd4c
	char zero[128];
Packit 08bd4c
Packit 08bd4c
	if (comp == MSZIP && archive_zlib_version() == NULL) {
Packit 08bd4c
		skipping("Skipping CAB format(MSZIP) check for %s",
Packit 08bd4c
		  refname);
Packit 08bd4c
		return;
Packit 08bd4c
	}
Packit 08bd4c
	memset(zero, 0, sizeof(zero));
Packit 08bd4c
	extract_reference_file(refname);
Packit 08bd4c
	assert((a = archive_read_new()) != NULL);
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK,
Packit 08bd4c
	    archive_read_open_filename(a, refname, 10240));
Packit 08bd4c
Packit 08bd4c
	/* Verify regular empty. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit 08bd4c
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit 08bd4c
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit 08bd4c
	if (comp != STORE) {
Packit 08bd4c
		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit 08bd4c
		assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit 08bd4c
		assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit 08bd4c
	}
Packit 08bd4c
	/* Verify regular file1. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit 08bd4c
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit 08bd4c
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit 08bd4c
Packit 08bd4c
	/* Verify regular file2. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit 08bd4c
	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
Packit 08bd4c
	assertEqualString("dir2/file2", archive_entry_pathname(ae));
Packit 08bd4c
	assertEqualInt(0, archive_entry_uid(ae));
Packit 08bd4c
	assertEqualInt(0, archive_entry_gid(ae));
Packit 08bd4c
	assertEqualInt(file2_size, archive_entry_size(ae));
Packit 08bd4c
	assertEqualInt(file2_size, archive_read_data(a, buff, file2_size));
Packit 08bd4c
	assertEqualMem(buff, file2, file2_size);
Packit 08bd4c
Packit 08bd4c
	/* End of archive. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae);;
Packit 08bd4c
Packit 08bd4c
	if (comp != STORE) {
Packit 08bd4c
		assertEqualInt(4, archive_file_count(a));
Packit 08bd4c
	} else {
Packit 08bd4c
		assertEqualInt(3, archive_file_count(a));
Packit 08bd4c
	}
Packit 08bd4c
Packit 08bd4c
	/* Verify archive format. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_FORMAT_CAB, archive_format(a));
Packit 08bd4c
Packit 08bd4c
	/* Close the archive. */
Packit 08bd4c
	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
Packit 08bd4c
	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
Packit 08bd4c
}
Packit 08bd4c
Packit 08bd4c
/*
Packit 08bd4c
 * Skip all file like 'bsdtar tvf foo.cab'.
Packit 08bd4c
 */
Packit 08bd4c
static void
Packit 08bd4c
verify3(const char *refname, enum comp_type comp)
Packit 08bd4c
{
Packit 08bd4c
	struct archive_entry *ae;
Packit 08bd4c
	struct archive *a;
Packit 08bd4c
	char zero[128];
Packit 08bd4c
Packit 08bd4c
	memset(zero, 0, sizeof(zero));
Packit 08bd4c
	extract_reference_file(refname);
Packit 08bd4c
	assert((a = archive_read_new()) != NULL);
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK,
Packit 08bd4c
	    archive_read_open_filename(a, refname, 10240));
Packit 08bd4c
Packit 08bd4c
	/* Verify regular empty. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit 08bd4c
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit 08bd4c
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit 08bd4c
	if (comp != STORE) {
Packit 08bd4c
		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit 08bd4c
		assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit 08bd4c
		assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit 08bd4c
	}
Packit 08bd4c
	/* Verify regular file1. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit 08bd4c
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit 08bd4c
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit 08bd4c
Packit 08bd4c
	/* Verify regular file2. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae);;
Packit 08bd4c
	assertEqualInt(archive_entry_is_encrypted(ae), 0);
Packit 08bd4c
	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
Packit 08bd4c
Packit 08bd4c
	/* End of archive. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae);;
Packit 08bd4c
Packit 08bd4c
	if (comp != STORE) {
Packit 08bd4c
		assertEqualInt(4, archive_file_count(a));
Packit 08bd4c
	} else {
Packit 08bd4c
		assertEqualInt(3, archive_file_count(a));
Packit 08bd4c
	}
Packit 08bd4c
Packit 08bd4c
	/* Verify archive format. */
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
Packit 08bd4c
	assertEqualIntA(a, ARCHIVE_FORMAT_CAB, archive_format(a));
Packit 08bd4c
Packit 08bd4c
	/* Close the archive. */
Packit 08bd4c
	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
Packit 08bd4c
	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
Packit 08bd4c
}
Packit 08bd4c
Packit 08bd4c
DEFINE_TEST(test_read_format_cab)
Packit 08bd4c
{
Packit 08bd4c
	/* Verify Cabinet file in no compression. */
Packit 08bd4c
	verify("test_read_format_cab_1.cab", STORE);
Packit 08bd4c
	verify2("test_read_format_cab_1.cab", STORE);
Packit 08bd4c
	verify3("test_read_format_cab_1.cab", STORE);
Packit 08bd4c
	/* Verify Cabinet file in MSZIP. */
Packit 08bd4c
	verify("test_read_format_cab_2.cab", MSZIP);
Packit 08bd4c
	verify2("test_read_format_cab_2.cab", MSZIP);
Packit 08bd4c
	verify3("test_read_format_cab_2.cab", MSZIP);
Packit 08bd4c
	/* Verify Cabinet file in LZX. */
Packit 08bd4c
	verify("test_read_format_cab_3.cab", LZX);
Packit 08bd4c
	verify2("test_read_format_cab_3.cab", LZX);
Packit 08bd4c
	verify3("test_read_format_cab_3.cab", LZX);
Packit 08bd4c
}
Packit 08bd4c