From 0cffe78d9313029e4eb172169cca32e15f74ad9f Mon Sep 17 00:00:00 2001 From: toseven Date: Sun, 7 May 2023 22:04:50 +0800 Subject: [PATCH] fix CI #1248 --- .github/workflows/build_and_test.yml | 26 +++++++++++++ scripts/executions-check.sh | 56 ++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100755 scripts/executions-check.sh diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index e3b8011974..da5e529a47 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -225,6 +225,32 @@ jobs: if: runner.os == 'macOS' # use bash v4 run: /usr/local/bin/bash -c 'RUN_ON_CI=1 ./scripts/test_all_fuzzers.sh' + executions-check: + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + - uses: lyricwulf/abc@v1 + with: + linux: llvm llvm-dev clang + macos: llvm bash coreutils + - uses: actions/checkout@v3 + with: + submodules: true # recursively checkout submodules + fetch-depth: 0 + - uses: Swatinem/rust-cache@v2 + - name: Build and run libfuzzer_libpng (Linux) + if: runner.os == 'Linux' + run: ./scripts/executions-check.sh + - name: Build and run libfuzzer_libpng (macOS) + if: runner.os == 'macOS' + run: /usr/local/bin/bash -c './scripts/executions-check.sh' + nostd-build: runs-on: ubuntu-latest steps: diff --git a/scripts/executions-check.sh b/scripts/executions-check.sh new file mode 100755 index 0000000000..2d3df11ee8 --- /dev/null +++ b/scripts/executions-check.sh @@ -0,0 +1,56 @@ +#!/bin/bash +install_libpng() { + cd ./fuzzers/libfuzzer_libpng && wget https://deac-fra.dl.sourceforge.net/project/libpng/libpng16/1.6.37/libpng-1.6.37.tar.xz + tar -xvf libpng-1.6.37.tar.xz || echo "Failed to download libpng" + cd libpng-1.6.37 && ./configure --enable-shared=no --with-pic=yes --enable-hardware-optimizations=yes && cd .. +} + +build_libpng(){ + cargo build --release || echo "ERROR: Failed to build libfuzzer_libpng" + + cd libpng-1.6.37 && make CC="$(pwd)/../target/release/libafl_cc" CXX="$(pwd)/../target/release/ libafl_cxx" -j "$(nproc)" && cd .. +} + +git_checkout(){ + git reset --hard HEAD^ +} + +build_run_fuzzer(){ + ./target/release/libafl_cxx ./harness.cc libpng-1.6.37/.libs/libpng16.a -I libpng-1.6.37/ -o fuzzer_libpng -lz -lm || exit 2 + + ./fuzzer_libpng > log.txt & + + # wait that fuzzer_libpng become the broker + sleep 1 + + timeout 5m ./fuzzer_libpng > /dev/null 2>&1 & + + while true; do + if grep -q "Broker" log.txt ; then + pkill -9 "fuzzer_libpng" + executions=$(grep -m 1 "Broker" log.txt | awk '{print $14}') + rm -rf ./libafl_unix_shmem_server + echo "${executions%,}" + break + fi + done +} + +main(){ + install_libpng + + build_libpng + echo "start to run the new fuzzer" + new_executions=$(build_run_fuzzer) + + git_checkout + + build_libpng + echo "start to run the last fuzzer" + last_executions=$(build_run_fuzzer) + + echo "the execution count of the new fuzzer is $new_executions" + echo "the execution count of the last fuzzer is $last_executions" +} + +main