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:
NihilDigit
2026-06-24 10:18:49 -04:00
committed by Brad King
parent 8f94e20abc
commit 9a46155665
4 changed files with 49 additions and 0 deletions
+9
View File
@@ -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)