Merge topic 'revert-extract-symlink'

4397f89c16 Restore archive extraction between directory symlinks
6e638ce109 Tests/File_Archive: Relax stderr line matching

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !11931
This commit is contained in:
Brad King
2026-04-15 11:48:03 -04:00
committed by Kitware Robot
6 changed files with 39 additions and 4 deletions
+2 -2
View File
@@ -2492,8 +2492,8 @@ bool extract_tar(std::string const& arFileName,
struct archive* a = archive_read_new();
struct archive* ext = archive_write_disk_new();
if (extract) {
int flags = ARCHIVE_EXTRACT_SECURE_NODOTDOT |
ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS | ARCHIVE_EXTRACT_SECURE_SYMLINKS;
int flags =
ARCHIVE_EXTRACT_SECURE_NODOTDOT | ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS;
if (extractTimestamps == cmSystemTools::cmTarExtractTimestamps::Yes) {
flags |= ARCHIVE_EXTRACT_TIME;
}
@@ -0,0 +1,12 @@
# Test that cmake -E tar can extract to a symlinked directory
set(OUTPUT_NAME "test.tar.gz")
set(COMPRESSION_FLAGS -cvzf)
set(COMPRESSION_OPTIONS --format=gnutar)
set(DECOMPRESSION_FLAGS -xvzf)
set(DESTINATION_SYMLINK ON)
include(${CMAKE_CURRENT_LIST_DIR}/roundtrip.cmake)
@@ -45,7 +45,13 @@ endif()
file(REMOVE ${FULL_OUTPUT_NAME})
file(REMOVE_RECURSE ${FULL_DECOMPRESS_DIR})
file(MAKE_DIRECTORY ${FULL_DECOMPRESS_DIR})
if(DESTINATION_SYMLINK AND UNIX)
file(MAKE_DIRECTORY ${FULL_DECOMPRESS_DIR}-dir)
execute_process(COMMAND ln -sf
${FULL_DECOMPRESS_DIR}-dir ${FULL_DECOMPRESS_DIR})
else()
file(MAKE_DIRECTORY ${FULL_DECOMPRESS_DIR})
endif()
run_tar(${CMAKE_CURRENT_BINARY_DIR} ${COMPRESSION_FLAGS} ${FULL_OUTPUT_NAME} ${COMPRESSION_OPTIONS} ${COMPRESS_DIR})
run_tar(${FULL_DECOMPRESS_DIR} ${DECOMPRESSION_FLAGS} ${FULL_OUTPUT_NAME} ${DECOMPRESSION_OPTIONS} -- ${DECOMPRESSION_PATHNAMES})
@@ -93,3 +93,5 @@ if(Python_EXECUTABLE)
run_cmake_script(path-absolute -DPython_EXECUTABLE=${Python_EXECUTABLE})
run_cmake_script(path-traversal -DPython_EXECUTABLE=${Python_EXECUTABLE})
endif()
run_cmake(extract-through-symlink)
@@ -0,0 +1,9 @@
# Test that file(ARCHIVE_EXTRACT) can extract to a symlinked directory
set(OUTPUT_NAME "test.tar.gz")
set(ARCHIVE_FORMAT gnutar)
set(COMPRESSION_TYPE GZip)
set(DESTINATION_SYMLINK ON)
include(${CMAKE_CURRENT_LIST_DIR}/roundtrip.cmake)
+7 -1
View File
@@ -34,7 +34,13 @@ endif()
file(REMOVE ${FULL_OUTPUT_NAME})
file(REMOVE_RECURSE ${FULL_DECOMPRESS_DIR})
file(MAKE_DIRECTORY ${FULL_DECOMPRESS_DIR})
if(DESTINATION_SYMLINK AND UNIX)
file(MAKE_DIRECTORY ${FULL_DECOMPRESS_DIR}-dir)
execute_process(COMMAND ln -sf
${FULL_DECOMPRESS_DIR}-dir ${FULL_DECOMPRESS_DIR})
else()
file(MAKE_DIRECTORY ${FULL_DECOMPRESS_DIR})
endif()
set(ENCODING_OPTIONS "")
if (ENCODING)