Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/libarchive/cpio/test/test_extract_cpio_absolute_paths.c
39507 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2024 Mostyn Bramley-Moore <[email protected]>
5
*/
6
7
#include "test.h"
8
9
#include <stdlib.h>
10
#include <string.h>
11
12
#if defined(_WIN32) && !defined(__CYGWIN__)
13
#define UNLINK _unlink
14
#else
15
#define UNLINK unlink
16
#endif
17
18
DEFINE_TEST(test_extract_cpio_absolute_paths)
19
{
20
int r;
21
22
// Create an absolute path for a test file inside testworkdir.
23
const char *entry_suffix = "/cpio-noabs";
24
size_t entry_suffix_length = strlen(entry_suffix);
25
size_t testworkdir_length = strlen(testworkdir);
26
size_t temp_absolute_file_name_length = testworkdir_length + entry_suffix_length;
27
char *temp_absolute_file_name = calloc(1, temp_absolute_file_name_length + 1); // +1 for null character.
28
assertEqualInt(snprintf(temp_absolute_file_name, temp_absolute_file_name_length + 1, "%s%s", testworkdir, entry_suffix),
29
temp_absolute_file_name_length);
30
31
// Create the file.
32
const char *sample_data = "test file from test_extract_cpio_absolute_paths";
33
assertMakeFile(temp_absolute_file_name, 0644, sample_data);
34
35
// Create an archive with the test file, using an absolute path.
36
assertMakeFile("filelist", 0644, temp_absolute_file_name);
37
r = systemf("%s -o < filelist > archive.cpio 2> stderr1.txt", testprog);
38
assertEqualInt(r, 0);
39
40
// Ensure that the temp file does not exist.
41
UNLINK(temp_absolute_file_name);
42
43
// We should refuse to create the absolute path without --insecure.
44
r = systemf("%s -i < archive.cpio 2> stderr2.txt", testprog);
45
assert(r != 0);
46
assertFileNotExists(temp_absolute_file_name);
47
UNLINK(temp_absolute_file_name); // Cleanup just in case.
48
49
// But if we specify --insecure then the absolute path should be created.
50
r = systemf("%s -i --insecure < archive.cpio 2> stderr3.txt", testprog);
51
assert(r == 0);
52
assertFileExists(temp_absolute_file_name);
53
}
54
55