From 9a46155665ba1228f4806ac101a1828ea104f41a Mon Sep 17 00:00:00 2001 From: NihilDigit Date: Wed, 24 Jun 2026 00:02:44 +0800 Subject: [PATCH] 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 --- Tests/RunCMake/CMakeLists.txt | 9 +++++ .../RunCMake/CommandLineTar/7zip-arm64-bcj.7z | Bin 0 -> 150 bytes .../CommandLineTar/7zip-arm64-bcj.cmake | 37 ++++++++++++++++++ .../CommandLineTar/RunCMakeTest.cmake | 3 ++ 4 files changed, 49 insertions(+) create mode 100644 Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.7z create mode 100644 Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.cmake diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 4a5e45a946..5d4d70935c 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -1152,12 +1152,21 @@ add_RunCMake_test(CommandLine -DLLVM_RC=$ -DCMAKE_SY -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA} -DEXIT_CODE_EXE=$ -DPRINT_STDIN_EXE=$) + +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) diff --git a/Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.7z b/Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.7z new file mode 100644 index 0000000000000000000000000000000000000000..71e26f4d37990dfe6cf0a67c71f4f1fdc1487b03 GIT binary patch literal 150 zcmXr7+Ou9=hJmGFr_v-51_(%k(&=3D^B5WUFWuZ3YHbMoD(4A%c<&1q_J{l?*uy`9L~_L60GcA(J5w bC@skZG!dwU!9nG@0OMUoQ8q>f1+X>%JP{Ka literal 0 HcmV?d00001 diff --git a/Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.cmake b/Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.cmake new file mode 100644 index 0000000000..9b066e2057 --- /dev/null +++ b/Tests/RunCMake/CommandLineTar/7zip-arm64-bcj.cmake @@ -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() diff --git a/Tests/RunCMake/CommandLineTar/RunCMakeTest.cmake b/Tests/RunCMake/CommandLineTar/RunCMakeTest.cmake index 01c2f7e3e6..4dd258f020 100644 --- a/Tests/RunCMake/CommandLineTar/RunCMakeTest.cmake +++ b/Tests/RunCMake/CommandLineTar/RunCMakeTest.cmake @@ -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)