xref: /aosp_15_r20/external/AFLplusplus/test/test-pre.sh (revision 08b48e0b10e97b33e7b60c5b6e2243bd915777f2)
1*08b48e0bSAndroid Build Coastguard Worker#!/bin/sh
2*08b48e0bSAndroid Build Coastguard Worker
3*08b48e0bSAndroid Build Coastguard Worker# All tests should start with sourcing test-pre.sh and finish with sourcing test-post.sh
4*08b48e0bSAndroid Build Coastguard Worker# They may set an error code with $CODE=1
5*08b48e0bSAndroid Build Coastguard Worker# If tests are incomplete, they may set $INCOMPLETE=1
6*08b48e0bSAndroid Build Coastguard Worker
7*08b48e0bSAndroid Build Coastguard WorkerAFL_TEST_COUNT=$((AFL_TEST_COUNT+1))
8*08b48e0bSAndroid Build Coastguard WorkerAFL_TEST_DEPTH=$((AFL_TEST_DEPTH+1))
9*08b48e0bSAndroid Build Coastguard Worker
10*08b48e0bSAndroid Build Coastguard Workerif [ $AFL_TEST_DEPTH = 1 ]; then
11*08b48e0bSAndroid Build Coastguard Worker# First run :)
12*08b48e0bSAndroid Build Coastguard Worker
13*08b48e0bSAndroid Build Coastguard Worker#
14*08b48e0bSAndroid Build Coastguard Worker# Ensure we have: test, type, diff, grep -qE
15*08b48e0bSAndroid Build Coastguard Worker#
16*08b48e0bSAndroid Build Coastguard Workertest -z "" 2>/dev/null || { echo Error: test command not found ; exit 1 ; }
17*08b48e0bSAndroid Build Coastguard WorkerGREP=`type grep > /dev/null 2>&1 && echo OK`
18*08b48e0bSAndroid Build Coastguard Workertest "$GREP" = OK || { echo Error: grep command not found ; exit 1 ; }
19*08b48e0bSAndroid Build Coastguard Workerecho foobar | grep -qE 'asd|oob' 2>/dev/null || { echo Error: grep command does not support -q and/or -E option ; exit 1 ; }
20*08b48e0bSAndroid Build Coastguard Workertest -e ./test-all.sh || cd $(dirname $0) || exit 1
21*08b48e0bSAndroid Build Coastguard Workertest -e ./test-all.sh || { echo Error: you must be in the test/ directory ; exit 1 ; }
22*08b48e0bSAndroid Build Coastguard Workerexport AFL_PATH=`pwd`/..
23*08b48e0bSAndroid Build Coastguard Workerexport AFL_TRY_AFFINITY=1 # workaround for travis that fails for no avail cores
24*08b48e0bSAndroid Build Coastguard Worker
25*08b48e0bSAndroid Build Coastguard Workerecho 1 > test.1
26*08b48e0bSAndroid Build Coastguard Workerecho 1 > test.2
27*08b48e0bSAndroid Build Coastguard WorkerOK=OK
28*08b48e0bSAndroid Build Coastguard Workerdiff test.1 test.2 >/dev/null 2>&1 || OK=
29*08b48e0bSAndroid Build Coastguard Workerrm -f test.1 test.2
30*08b48e0bSAndroid Build Coastguard Workertest -z "$OK" && { echo Error: diff is not working ; exit 1 ; }
31*08b48e0bSAndroid Build Coastguard Workertest -z "$LLVM_CONFIG" && LLVM_CONFIG=llvm-config
32*08b48e0bSAndroid Build Coastguard Worker
33*08b48e0bSAndroid Build Coastguard Worker# check for '-a' option of grep
34*08b48e0bSAndroid Build Coastguard Workerif grep -a test test-all.sh >/dev/null 2>&1; then
35*08b48e0bSAndroid Build Coastguard Worker  GREPAOPTION=' -a'
36*08b48e0bSAndroid Build Coastguard Workerelse
37*08b48e0bSAndroid Build Coastguard Worker  GREPAOPTION=
38*08b48e0bSAndroid Build Coastguard Workerfi
39*08b48e0bSAndroid Build Coastguard Worker
40*08b48e0bSAndroid Build Coastguard Workertest_compcov_binary_functionality() {
41*08b48e0bSAndroid Build Coastguard Worker  RUN="../afl-showmap -m ${MEM_LIMIT} -o /dev/null -- $1"
42*08b48e0bSAndroid Build Coastguard Worker  $RUN 'LIBTOKENCAP' | grep 'your string was LIBTOKENCAP' \
43*08b48e0bSAndroid Build Coastguard Worker    && $RUN 'BUGMENOT' | grep 'your string was BUGMENOT' \
44*08b48e0bSAndroid Build Coastguard Worker    && $RUN 'BANANA' | grep 'your string started with BAN' \
45*08b48e0bSAndroid Build Coastguard Worker    && $RUN 'APRI' | grep 'your string was APRI' \
46*08b48e0bSAndroid Build Coastguard Worker    && $RUN 'kiWI' | grep 'your string was Kiwi' \
47*08b48e0bSAndroid Build Coastguard Worker    && $RUN 'Avocado' | grep 'your string was avocado' \
48*08b48e0bSAndroid Build Coastguard Worker    && $RUN 'GRAX' 3 | grep 'your string was a prefix of Grapes' \
49*08b48e0bSAndroid Build Coastguard Worker    && $RUN 'LOCALVARIABLE' | grep 'local var memcmp works!' \
50*08b48e0bSAndroid Build Coastguard Worker    && $RUN 'abc' | grep 'short local var memcmp works!' \
51*08b48e0bSAndroid Build Coastguard Worker    && $RUN 'GLOBALVARIABLE' | grep 'global var memcmp works!'
52*08b48e0bSAndroid Build Coastguard Worker} > /dev/null
53*08b48e0bSAndroid Build Coastguard Worker
54*08b48e0bSAndroid Build Coastguard WorkerECHO="printf %b\\n"
55*08b48e0bSAndroid Build Coastguard Worker$ECHO \\101 2>&1 | grep -qE '^A' || {
56*08b48e0bSAndroid Build Coastguard Worker  ECHO=
57*08b48e0bSAndroid Build Coastguard Worker  test -e /bin/printf && {
58*08b48e0bSAndroid Build Coastguard Worker    ECHO="/bin/printf %b\\n"
59*08b48e0bSAndroid Build Coastguard Worker    $ECHO "\\101" 2>&1 | grep -qE '^A' || ECHO=
60*08b48e0bSAndroid Build Coastguard Worker  }
61*08b48e0bSAndroid Build Coastguard Worker}
62*08b48e0bSAndroid Build Coastguard Workertest -z "$ECHO" && { printf Error: printf command does not support octal character codes ; exit 1 ; }
63*08b48e0bSAndroid Build Coastguard Worker
64*08b48e0bSAndroid Build Coastguard Workerexport AFL_EXIT_WHEN_DONE=1
65*08b48e0bSAndroid Build Coastguard Workerexport AFL_EXIT_ON_TIME=60
66*08b48e0bSAndroid Build Coastguard Workerexport AFL_SKIP_CPUFREQ=1
67*08b48e0bSAndroid Build Coastguard Workerexport AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1
68*08b48e0bSAndroid Build Coastguard Workerunset AFL_NO_X86
69*08b48e0bSAndroid Build Coastguard Workerunset AFL_QUIET
70*08b48e0bSAndroid Build Coastguard Workerunset AFL_DEBUG
71*08b48e0bSAndroid Build Coastguard Workerunset AFL_HARDEN
72*08b48e0bSAndroid Build Coastguard Workerunset AFL_USE_ASAN
73*08b48e0bSAndroid Build Coastguard Workerunset AFL_USE_MSAN
74*08b48e0bSAndroid Build Coastguard Workerunset AFL_USE_UBSAN
75*08b48e0bSAndroid Build Coastguard Workerunset AFL_USE_LSAN
76*08b48e0bSAndroid Build Coastguard Workerunset AFL_TMPDIR
77*08b48e0bSAndroid Build Coastguard Workerunset AFL_CC
78*08b48e0bSAndroid Build Coastguard Workerunset AFL_PRELOAD
79*08b48e0bSAndroid Build Coastguard Workerunset AFL_GCC_INSTRUMENT_FILE
80*08b48e0bSAndroid Build Coastguard Workerunset AFL_LLVM_INSTRUMENT_FILE
81*08b48e0bSAndroid Build Coastguard Workerunset AFL_LLVM_INSTRIM
82*08b48e0bSAndroid Build Coastguard Workerunset AFL_LLVM_LAF_SPLIT_SWITCHES
83*08b48e0bSAndroid Build Coastguard Workerunset AFL_LLVM_LAF_TRANSFORM_COMPARES
84*08b48e0bSAndroid Build Coastguard Workerunset AFL_LLVM_LAF_SPLIT_COMPARES
85*08b48e0bSAndroid Build Coastguard Workerunset AFL_QEMU_PERSISTENT_ADDR
86*08b48e0bSAndroid Build Coastguard Workerunset AFL_QEMU_PERSISTENT_RETADDR_OFFSET
87*08b48e0bSAndroid Build Coastguard Workerunset AFL_QEMU_PERSISTENT_GPR
88*08b48e0bSAndroid Build Coastguard Workerunset AFL_QEMU_PERSISTENT_RET
89*08b48e0bSAndroid Build Coastguard Workerunset AFL_QEMU_PERSISTENT_HOOK
90*08b48e0bSAndroid Build Coastguard Workerunset AFL_QEMU_PERSISTENT_CNT
91*08b48e0bSAndroid Build Coastguard Workerunset AFL_QEMU_PERSISTENT_MEM
92*08b48e0bSAndroid Build Coastguard Workerunset AFL_QEMU_PERSISTENT_EXITS
93*08b48e0bSAndroid Build Coastguard Workerunset AFL_CUSTOM_MUTATOR_LIBRARY
94*08b48e0bSAndroid Build Coastguard Workerunset AFL_PYTHON_MODULE
95*08b48e0bSAndroid Build Coastguard Workerunset AFL_PRELOAD
96*08b48e0bSAndroid Build Coastguard Workerunset LD_PRELOAD
97*08b48e0bSAndroid Build Coastguard Workerunset SKIP
98*08b48e0bSAndroid Build Coastguard Worker
99*08b48e0bSAndroid Build Coastguard Workerrm -rf in in2 out
100*08b48e0bSAndroid Build Coastguard Worker
101*08b48e0bSAndroid Build Coastguard Workertest -z "$TRAVIS_OS_NAME" && {
102*08b48e0bSAndroid Build Coastguard Worker  export ASAN_OPTIONS=detect_leaks=0:allocator_may_return_null=1:abort_on_error=1:symbolize=0
103*08b48e0bSAndroid Build Coastguard Worker}
104*08b48e0bSAndroid Build Coastguard Workertest -n "$TRAVIS_OS_NAME" && {
105*08b48e0bSAndroid Build Coastguard Worker  export ASAN_OPTIONS=detect_leaks=0:allocator_may_return_null=1:abort_on_error=1:symbolize=1
106*08b48e0bSAndroid Build Coastguard Worker}
107*08b48e0bSAndroid Build Coastguard Worker
108*08b48e0bSAndroid Build Coastguard Worker#export AFL_LLVM_INSTRUMENT=AFL # AFL mode makes dlopen not link on macos
109*08b48e0bSAndroid Build Coastguard Worker
110*08b48e0bSAndroid Build Coastguard Worker# on OpenBSD we need to work with llvm from /usr/local/bin
111*08b48e0bSAndroid Build Coastguard Workertest -e /usr/local/bin/opt && {
112*08b48e0bSAndroid Build Coastguard Worker  test `uname -s` = 'Darwin' || export PATH="/usr/local/bin:${PATH}"
113*08b48e0bSAndroid Build Coastguard Worker}
114*08b48e0bSAndroid Build Coastguard Worker# on MacOS X we prefer afl-clang over afl-gcc, because
115*08b48e0bSAndroid Build Coastguard Worker# afl-gcc does not work there (it is a symlink from clang)
116*08b48e0bSAndroid Build Coastguard Workertest `uname -s` = 'Darwin' -o `uname -s` = 'FreeBSD' && {
117*08b48e0bSAndroid Build Coastguard Worker  AFL_GCC=afl-clang
118*08b48e0bSAndroid Build Coastguard Worker} || {
119*08b48e0bSAndroid Build Coastguard Worker  AFL_GCC=afl-gcc
120*08b48e0bSAndroid Build Coastguard Worker}
121*08b48e0bSAndroid Build Coastguard Workercommand -v gcc >/dev/null 2>&1 || AFL_GCC=afl-clang
122*08b48e0bSAndroid Build Coastguard Worker
123*08b48e0bSAndroid Build Coastguard WorkerSYS=`uname -m`
124*08b48e0bSAndroid Build Coastguard Worker
125*08b48e0bSAndroid Build Coastguard WorkerGREY="\\033[1;90m"
126*08b48e0bSAndroid Build Coastguard WorkerBLUE="\\033[1;94m"
127*08b48e0bSAndroid Build Coastguard WorkerGREEN="\\033[0;32m"
128*08b48e0bSAndroid Build Coastguard WorkerRED="\\033[0;31m"
129*08b48e0bSAndroid Build Coastguard WorkerYELLOW="\\033[1;93m"
130*08b48e0bSAndroid Build Coastguard WorkerRESET="\\033[0m"
131*08b48e0bSAndroid Build Coastguard Worker
132*08b48e0bSAndroid Build Coastguard WorkerMEM_LIMIT=none
133*08b48e0bSAndroid Build Coastguard Worker
134*08b48e0bSAndroid Build Coastguard Workerexport PATH="${PATH}:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
135*08b48e0bSAndroid Build Coastguard Worker
136*08b48e0bSAndroid Build Coastguard Worker$ECHO "${RESET}${GREY}[*] starting AFL++ test framework ..."
137*08b48e0bSAndroid Build Coastguard Worker
138*08b48e0bSAndroid Build Coastguard Workertest -z "$SYS" && $ECHO "$YELLOW[-] uname -m did not succeed"
139*08b48e0bSAndroid Build Coastguard Worker
140*08b48e0bSAndroid Build Coastguard WorkerCODE=0
141*08b48e0bSAndroid Build Coastguard WorkerINCOMPLETE=0
142*08b48e0bSAndroid Build Coastguard Worker
143*08b48e0bSAndroid Build Coastguard Workerfi
144