xref: /freebsd/contrib/libarchive/libarchive/test/test_read_format_gtar_redundant_L.c (revision 2e113ef82465598b8c26e0ca415fbe90677fbd47)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2024 Tim Kientzle
5  * All rights reserved.
6  */
7 #include "test.h"
8 
9 #include <string.h>
10 
DEFINE_TEST(test_read_format_gtar_redundant_L)11 DEFINE_TEST(test_read_format_gtar_redundant_L)
12 {
13 	const char *refname = "test_read_format_gtar_redundant_L.tar.Z";
14 	struct archive *a;
15 	struct archive_entry *ae;
16 
17 	extract_reference_file(refname);
18 	assert((a = archive_read_new()) != NULL);
19 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
20 	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
21 	assertEqualIntA(a, ARCHIVE_OK,
22 	    archive_read_open_filename(a, refname, 10240));
23 
24 	/* First file has redundant 'L' headers; this should prompt
25 	 * a suitable ARCHIVE_WARN message */
26 	assertEqualIntA(a, ARCHIVE_WARN, archive_read_next_header(a, &ae));
27 	assertEqualInt(archive_errno(a), -1);
28 	assert(strstr(archive_error_string(a), "Redundant 'L'") != NULL);
29 
30 	/* End of archive. */
31 	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
32 
33 	/* Verify archive format. */
34 	assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0));
35 	assertEqualIntA(a, ARCHIVE_FORMAT_TAR_GNUTAR, archive_format(a));
36 
37 	/* Close the archive. */
38 	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
39 	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
40 }
41