mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
Tests: Cover ARM64 BCJ 7z extraction
Add a small 7z fixture whose filter chain is ARM64 BCJ followed by
LZMA2. This exercises extraction through CMake's bundled libarchive
and liblzma path.
The fixture was generated with 7-Zip 25.01 (arm64). The payload is a
16-byte AArch64 instruction sequence:
1f2003d500000094000000141f2003d5
The payload mtime was set to 2026-06-21T00:00:00Z and then archived
with:
7z a -m0=ARM64 -m1=LZMA2 -mb0:1 -mtm=on -mtc=off -mta=off \
7zip-arm64-bcj.7z payload.bin
The resulting 7zip-arm64-bcj.7z has SHA256:
3DE9111E71C6AA3CBD604460040EBBE6F57E8B00D1D5C5343AC07D435AA2A8D2
This commit is contained in:
@@ -1152,12 +1152,21 @@ add_RunCMake_test(CommandLine -DLLVM_RC=$<TARGET_FILE:pseudo_llvm-rc> -DCMAKE_SY
|
||||
-DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}
|
||||
-DEXIT_CODE_EXE=$<TARGET_FILE:exit_code>
|
||||
-DPRINT_STDIN_EXE=$<TARGET_FILE:print_stdin>)
|
||||
|
||||
if(NOT DEFINED CMake_TEST_LibLZMA_ARM64_BCJ)
|
||||
if(NOT CMake_TEST_EXTERNAL_CMAKE AND NOT CMAKE_USE_SYSTEM_LIBARCHIVE AND NOT CMAKE_USE_SYSTEM_LIBLZMA)
|
||||
set(CMake_TEST_LibLZMA_ARM64_BCJ 1)
|
||||
endif()
|
||||
endif()
|
||||
if(CMake_TEST_LibArchive_VERSION)
|
||||
list(APPEND CommandLineTar_ARGS -DCMake_TEST_LibArchive_VERSION=${CMake_TEST_LibArchive_VERSION})
|
||||
endif()
|
||||
if(DEFINED CMake_TEST_LOCALE_CHARSET)
|
||||
list(APPEND CommandLineTar_ARGS -DCMake_TEST_LOCALE_CHARSET=${CMake_TEST_LOCALE_CHARSET})
|
||||
endif()
|
||||
if(DEFINED CMake_TEST_LibLZMA_ARM64_BCJ)
|
||||
list(APPEND CommandLineTar_ARGS -DCMake_TEST_LibLZMA_ARM64_BCJ=${CMake_TEST_LibLZMA_ARM64_BCJ})
|
||||
endif()
|
||||
list(APPEND CommandLineTar_ARGS -DPython_EXECUTABLE=${Python_EXECUTABLE})
|
||||
add_RunCMake_test(CommandLineTar)
|
||||
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,37 @@
|
||||
set(ARCHIVE "${CMAKE_CURRENT_LIST_DIR}/7zip-arm64-bcj.7z")
|
||||
set(OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/extract")
|
||||
set(OUTPUT_FILE "${OUTPUT_DIR}/payload.bin")
|
||||
set(EXPECTED_HEX "1f2003d500000094000000141f2003d5")
|
||||
|
||||
file(REMOVE_RECURSE "${OUTPUT_DIR}")
|
||||
file(MAKE_DIRECTORY "${OUTPUT_DIR}")
|
||||
|
||||
execute_process(
|
||||
COMMAND "${CMAKE_COMMAND}" -E tar xvf "${ARCHIVE}"
|
||||
WORKING_DIRECTORY "${OUTPUT_DIR}"
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE stdout
|
||||
ERROR_VARIABLE stderr
|
||||
)
|
||||
|
||||
if(NOT result EQUAL 0)
|
||||
message(FATAL_ERROR
|
||||
"Failed to extract ARM64 BCJ 7z archive:\n"
|
||||
"result: ${result}\n"
|
||||
"stdout: ${stdout}\n"
|
||||
"stderr: ${stderr}"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${OUTPUT_FILE}")
|
||||
message(FATAL_ERROR "Expected file was not extracted:\n ${OUTPUT_FILE}")
|
||||
endif()
|
||||
|
||||
file(READ "${OUTPUT_FILE}" actual_hex HEX)
|
||||
if(NOT actual_hex STREQUAL EXPECTED_HEX)
|
||||
message(FATAL_ERROR
|
||||
"Extracted file content mismatch:\n"
|
||||
"expected: ${EXPECTED_HEX}\n"
|
||||
"actual: ${actual_hex}"
|
||||
)
|
||||
endif()
|
||||
@@ -31,6 +31,9 @@ run_cmake(7zip)
|
||||
run_cmake(7zip-bz2)
|
||||
run_cmake(7zip-gz)
|
||||
run_cmake(7zip-lzma)
|
||||
if(CMake_TEST_LibLZMA_ARM64_BCJ)
|
||||
run_cmake(7zip-arm64-bcj)
|
||||
endif()
|
||||
run_cmake(7zip-xz)
|
||||
if (test_3_8_0)
|
||||
run_cmake(7zip-zstd)
|
||||
|
||||
Reference in New Issue
Block a user