4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / CMakeLists.txt TXT
cmake_minimum_required(VERSION 3.16)
project(tar-bug-repro VERSION 1.0)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Check for required tools
find_program(CARGO_EXECUTABLE cargo REQUIRED)
find_program(TAR_EXECUTABLE tar REQUIRED)

# Output directories
set(OUTPUT_DIR ${CMAKE_BINARY_DIR}/output)
set(RUST_TARGET_DIR ${CMAKE_BINARY_DIR}/rust-target)
set(LOGS_DIR ${OUTPUT_DIR}/logs)
file(MAKE_DIRECTORY ${OUTPUT_DIR} ${LOGS_DIR})

# C++ executables
add_executable(repro_generator repro_generator/repro_generator.cpp)
add_executable(tarwalk tarwalk/tarwalk.cpp)
add_executable(tarwalk_bad tarwalk/tarwalk_bad.cpp)

# Custom target to build Rust tar-bug-detector
add_custom_target(rust_detector
    ALL
    COMMAND "${CARGO_EXECUTABLE}" build --release --target-dir "${RUST_TARGET_DIR}"
    WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/tar-bug-detector"
    COMMENT "Building Rust tar-bug-detector"
    USES_TERMINAL
)
set_property(TARGET rust_detector APPEND PROPERTY ADDITIONAL_CLEAN_FILES "${RUST_TARGET_DIR}")

# Custom target to generate the reproducing tar file
add_custom_target(generate_repro
    COMMAND repro_generator
    DEPENDS repro_generator
    WORKING_DIRECTORY "${OUTPUT_DIR}"
    COMMENT "Generating reproduction tar file"
)

# Custom target to run tar command
add_custom_target(run_tar_tvf
    COMMAND "${TAR_EXECUTABLE}" tvf pax_bug_compact.tar > "${LOGS_DIR}/tar_tvf_output.txt" 2>&1
    DEPENDS generate_repro
    WORKING_DIRECTORY "${OUTPUT_DIR}"
    COMMENT "Running 'tar tvf' on reproduction file"
)

# Custom target to run correct tarwalk
add_custom_target(run_tarwalk
    COMMAND tarwalk pax_bug_compact.tar > "${LOGS_DIR}/tarwalk_correct.txt" 2>&1
    DEPENDS tarwalk generate_repro
    WORKING_DIRECTORY "${OUTPUT_DIR}"
    COMMENT "Running correct tarwalk implementation"
)

# Custom target to run buggy tarwalk
add_custom_target(run_tarwalk_bad
    COMMAND tarwalk_bad pax_bug_compact.tar > "${LOGS_DIR}/tarwalk_buggy.txt" 2>&1
    DEPENDS tarwalk_bad generate_repro
    WORKING_DIRECTORY "${OUTPUT_DIR}"
    COMMENT "Running buggy tarwalk implementation"
)

# Custom target to run Rust detector
add_custom_target(run_detector
    COMMAND "${RUST_TARGET_DIR}/release/tar-bug-detector" pax_bug_compact.tar > "${LOGS_DIR}/rust_comparison.txt" 2>&1
    DEPENDS rust_detector generate_repro
    WORKING_DIRECTORY "${OUTPUT_DIR}"
    COMMENT "Running Rust tar library comparison"
)

# Custom target to generate summary report
add_custom_target(generate_report
    COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_SOURCE_DIR}/generate_report.cmake"
    DEPENDS run_tar_tvf run_tarwalk run_tarwalk_bad run_detector
    WORKING_DIRECTORY "${OUTPUT_DIR}"
    COMMENT "Generating summary report"
)

# Main target that runs everything in sequence
add_custom_target(reproduce_bug
    DEPENDS generate_report
    COMMENT "Complete bug reproduction sequence"
)

# Add a clean target for the output directory
add_custom_target(clean_output
    COMMAND "${CMAKE_COMMAND}" -E remove_directory "${OUTPUT_DIR}"
    COMMAND "${CMAKE_COMMAND}" -E make_directory "${OUTPUT_DIR}"
    COMMAND "${CMAKE_COMMAND}" -E make_directory "${LOGS_DIR}"
    COMMENT "Cleaning output directory"
)

# Print instructions
add_custom_target(instructions
    COMMAND "${CMAKE_COMMAND}" -E echo ""
    COMMAND "${CMAKE_COMMAND}" -E echo "TAR Bug Reproduction Instructions:"
    COMMAND "${CMAKE_COMMAND}" -E echo "=================================="
    COMMAND "${CMAKE_COMMAND}" -E echo ""
    COMMAND "${CMAKE_COMMAND}" -E echo "To reproduce the bug:"
    COMMAND "${CMAKE_COMMAND}" -E echo "  ${CMAKE_MAKE_PROGRAM} reproduce_bug"
    COMMAND "${CMAKE_COMMAND}" -E echo ""
    COMMAND "${CMAKE_COMMAND}" -E echo "To run individual steps:"
    COMMAND "${CMAKE_COMMAND}" -E echo "  ${CMAKE_MAKE_PROGRAM} generate_repro    # Generate test tar file"
    COMMAND "${CMAKE_COMMAND}" -E echo "  ${CMAKE_MAKE_PROGRAM} run_tar_tvf       # Show what GNU tar sees"
    COMMAND "${CMAKE_COMMAND}" -E echo "  ${CMAKE_MAKE_PROGRAM} run_tarwalk       # Show correct parsing"
    COMMAND "${CMAKE_COMMAND}" -E echo "  ${CMAKE_MAKE_PROGRAM} run_tarwalk_bad   # Show buggy parsing"
    COMMAND "${CMAKE_COMMAND}" -E echo "  ${CMAKE_MAKE_PROGRAM} run_detector      # Compare tar vs tokio-tar"
    COMMAND "${CMAKE_COMMAND}" -E echo ""
    COMMAND "${CMAKE_COMMAND}" -E echo "Output files will be in: ${OUTPUT_DIR}"
    COMMAND "${CMAKE_COMMAND}" -E echo "Log files will be in: ${LOGS_DIR}"
    COMMENT "Displaying instructions"
)

# vim: set ts=4 sts=4 sw=4 et: