1*08b48e0bSAndroid Build Coastguard Worker#!/bin/sh 2*08b48e0bSAndroid Build Coastguard Worker 3*08b48e0bSAndroid Build Coastguard Worker. ./test-pre.sh 4*08b48e0bSAndroid Build Coastguard Worker 5*08b48e0bSAndroid Build Coastguard WorkerOS=$(uname -s) 6*08b48e0bSAndroid Build Coastguard Worker 7*08b48e0bSAndroid Build Coastguard WorkerAFL_GCC=afl-gcc 8*08b48e0bSAndroid Build Coastguard Worker$ECHO "$BLUE[*] Testing: ${AFL_GCC}, afl-showmap, afl-fuzz, afl-cmin and afl-tmin" 9*08b48e0bSAndroid Build Coastguard Workertest "$SYS" = "i686" -o "$SYS" = "x86_64" -o "$SYS" = "amd64" -o "$SYS" = "i86pc" -o "$SYS" = "i386" && { 10*08b48e0bSAndroid Build Coastguard Worker test -e ../${AFL_GCC} -a -e ../afl-showmap -a -e ../afl-fuzz && { 11*08b48e0bSAndroid Build Coastguard Worker ../${AFL_GCC} -v 2>&1 | grep -qi "gcc version" && { 12*08b48e0bSAndroid Build Coastguard Worker ../${AFL_GCC} -o test-instr.plain -O0 ../test-instr.c > /dev/null 2>&1 13*08b48e0bSAndroid Build Coastguard Worker AFL_HARDEN=1 ../${AFL_GCC} -o test-compcov.harden test-compcov.c > /dev/null 2>&1 14*08b48e0bSAndroid Build Coastguard Worker test -e test-instr.plain && { 15*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] ${AFL_GCC} compilation succeeded" 16*08b48e0bSAndroid Build Coastguard Worker echo 0 | AFL_QUIET=1 ../afl-showmap -m ${MEM_LIMIT} -o test-instr.plain.0 -r -- ./test-instr.plain > /dev/null 2>&1 17*08b48e0bSAndroid Build Coastguard Worker AFL_QUIET=1 ../afl-showmap -m ${MEM_LIMIT} -o test-instr.plain.1 -r -- ./test-instr.plain < /dev/null > /dev/null 2>&1 18*08b48e0bSAndroid Build Coastguard Worker test -e test-instr.plain.0 -a -e test-instr.plain.1 && { 19*08b48e0bSAndroid Build Coastguard Worker diff test-instr.plain.0 test-instr.plain.1 > /dev/null 2>&1 && { 20*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] ${AFL_GCC} instrumentation should be different on different input but is not" 21*08b48e0bSAndroid Build Coastguard Worker CODE=1 22*08b48e0bSAndroid Build Coastguard Worker } || { 23*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] ${AFL_GCC} instrumentation present and working correctly" 24*08b48e0bSAndroid Build Coastguard Worker } 25*08b48e0bSAndroid Build Coastguard Worker } || { 26*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] ${AFL_GCC} instrumentation failed" 27*08b48e0bSAndroid Build Coastguard Worker CODE=1 28*08b48e0bSAndroid Build Coastguard Worker } 29*08b48e0bSAndroid Build Coastguard Worker rm -f test-instr.plain.0 test-instr.plain.1 30*08b48e0bSAndroid Build Coastguard Worker SKIP= 31*08b48e0bSAndroid Build Coastguard Worker TUPLES=`echo 1|AFL_QUIET=1 ../afl-showmap -m ${MEM_LIMIT} -o /dev/null -- ./test-instr.plain 2>&1 | grep Captur | awk '{print$3}'` 32*08b48e0bSAndroid Build Coastguard Worker test "$TUPLES" -gt 1 -a "$TUPLES" -lt 22 && { 33*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] ${AFL_GCC} run reported $TUPLES instrumented locations which is fine" 34*08b48e0bSAndroid Build Coastguard Worker } || { 35*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] ${AFL_GCC} instrumentation produces weird numbers: $TUPLES" 36*08b48e0bSAndroid Build Coastguard Worker CODE=1 37*08b48e0bSAndroid Build Coastguard Worker } 38*08b48e0bSAndroid Build Coastguard Worker test "$TUPLES" -lt 3 && SKIP=1 39*08b48e0bSAndroid Build Coastguard Worker true # this is needed because of the test above 40*08b48e0bSAndroid Build Coastguard Worker } || { 41*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] ${AFL_GCC} failed" 42*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 43*08b48e0bSAndroid Build Coastguard Worker uname -a 44*08b48e0bSAndroid Build Coastguard Worker ../${AFL_GCC} -o test-instr.plain -O0 ../test-instr.c 45*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 46*08b48e0bSAndroid Build Coastguard Worker CODE=1 47*08b48e0bSAndroid Build Coastguard Worker } 48*08b48e0bSAndroid Build Coastguard Worker test -e test-compcov.harden && { 49*08b48e0bSAndroid Build Coastguard Worker nm test-compcov.harden | grep -Eq 'stack_chk_fail|fstack-protector-all|fortified' > /dev/null 2>&1 && { 50*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] ${AFL_GCC} hardened mode succeeded and is working" 51*08b48e0bSAndroid Build Coastguard Worker } || { 52*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] ${AFL_GCC} hardened mode is not hardened" 53*08b48e0bSAndroid Build Coastguard Worker env | grep -E 'AFL|PATH|LLVM' 54*08b48e0bSAndroid Build Coastguard Worker AFL_DEBUG=1 AFL_HARDEN=1 ../${AFL_GCC} -o test-compcov.harden test-compcov.c 55*08b48e0bSAndroid Build Coastguard Worker nm test-compcov.harden 56*08b48e0bSAndroid Build Coastguard Worker CODE=1 57*08b48e0bSAndroid Build Coastguard Worker } 58*08b48e0bSAndroid Build Coastguard Worker rm -f test-compcov.harden 59*08b48e0bSAndroid Build Coastguard Worker } || { 60*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] ${AFL_GCC} hardened mode compilation failed" 61*08b48e0bSAndroid Build Coastguard Worker CODE=1 62*08b48e0bSAndroid Build Coastguard Worker } 63*08b48e0bSAndroid Build Coastguard Worker # now we want to be sure that afl-fuzz is working 64*08b48e0bSAndroid Build Coastguard Worker # make sure crash reporter is disabled on Mac OS X 65*08b48e0bSAndroid Build Coastguard Worker (test "$OS" = "Darwin" && test $(launchctl list 2>/dev/null | grep -q '\.ReportCrash$') && { 66*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] we cannot run afl-fuzz with enabled crash reporter. Run 'sudo sh afl-system-config'.$RESET" 67*08b48e0bSAndroid Build Coastguard Worker true 68*08b48e0bSAndroid Build Coastguard Worker }) || { 69*08b48e0bSAndroid Build Coastguard Worker mkdir -p in 70*08b48e0bSAndroid Build Coastguard Worker echo 0 > in/in 71*08b48e0bSAndroid Build Coastguard Worker test -z "$SKIP" && { 72*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREY[*] running afl-fuzz for ${AFL_GCC}, this will take approx 10 seconds" 73*08b48e0bSAndroid Build Coastguard Worker { 74*08b48e0bSAndroid Build Coastguard Worker ../afl-fuzz -V07 -m ${MEM_LIMIT} -i in -o out -- ./test-instr.plain >>errors 2>&1 75*08b48e0bSAndroid Build Coastguard Worker } >>errors 2>&1 76*08b48e0bSAndroid Build Coastguard Worker test -n "$( ls out/default/queue/id:000002* 2>/dev/null )" && { 77*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] afl-fuzz is working correctly with ${AFL_GCC}" 78*08b48e0bSAndroid Build Coastguard Worker } || { 79*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 80*08b48e0bSAndroid Build Coastguard Worker cat errors 81*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 82*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] afl-fuzz is not working correctly with ${AFL_GCC}" 83*08b48e0bSAndroid Build Coastguard Worker CODE=1 84*08b48e0bSAndroid Build Coastguard Worker } 85*08b48e0bSAndroid Build Coastguard Worker } 86*08b48e0bSAndroid Build Coastguard Worker echo 000000000000000000000000 > in/in2 87*08b48e0bSAndroid Build Coastguard Worker echo 111 > in/in3 88*08b48e0bSAndroid Build Coastguard Worker test "$OS" = "Darwin" && { 89*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREY[*] afl-cmin not available on macOS, cannot test afl-cmin" 90*08b48e0bSAndroid Build Coastguard Worker } || { 91*08b48e0bSAndroid Build Coastguard Worker mkdir -p in2 92*08b48e0bSAndroid Build Coastguard Worker ../afl-cmin -m ${MEM_LIMIT} -i in -o in2 -- ./test-instr.plain >/dev/null 2>&1 # why is afl-forkserver writing to stderr? 93*08b48e0bSAndroid Build Coastguard Worker CNT=`ls in2/* 2>/dev/null | wc -l` 94*08b48e0bSAndroid Build Coastguard Worker case "$CNT" in 95*08b48e0bSAndroid Build Coastguard Worker *2) $ECHO "$GREEN[+] afl-cmin correctly minimized the number of testcases" ;; 96*08b48e0bSAndroid Build Coastguard Worker *) $ECHO "$RED[!] afl-cmin did not correctly minimize the number of testcases ($CNT)" 97*08b48e0bSAndroid Build Coastguard Worker CODE=1 98*08b48e0bSAndroid Build Coastguard Worker ;; 99*08b48e0bSAndroid Build Coastguard Worker esac 100*08b48e0bSAndroid Build Coastguard Worker rm -f in2/in* 101*08b48e0bSAndroid Build Coastguard Worker } 102*08b48e0bSAndroid Build Coastguard Worker export AFL_QUIET=1 103*08b48e0bSAndroid Build Coastguard Worker if command -v bash >/dev/null ; then { 104*08b48e0bSAndroid Build Coastguard Worker ../afl-cmin.bash -m ${MEM_LIMIT} -i in -o in2 -- ./test-instr.plain >/dev/null 105*08b48e0bSAndroid Build Coastguard Worker CNT=`ls in2/* 2>/dev/null | wc -l` 106*08b48e0bSAndroid Build Coastguard Worker case "$CNT" in 107*08b48e0bSAndroid Build Coastguard Worker *2) $ECHO "$GREEN[+] afl-cmin.bash correctly minimized the number of testcases" ;; 108*08b48e0bSAndroid Build Coastguard Worker *) $ECHO "$RED[!] afl-cmin.bash did not correctly minimize the number of testcases ($CNT)" 109*08b48e0bSAndroid Build Coastguard Worker CODE=1 110*08b48e0bSAndroid Build Coastguard Worker ;; 111*08b48e0bSAndroid Build Coastguard Worker esac 112*08b48e0bSAndroid Build Coastguard Worker } else { 113*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREY[*] no bash available, cannot test afl-cmin.bash" 114*08b48e0bSAndroid Build Coastguard Worker } 115*08b48e0bSAndroid Build Coastguard Worker fi 116*08b48e0bSAndroid Build Coastguard Worker ../afl-tmin -m ${MEM_LIMIT} -i in/in2 -o in2/in2 -- ./test-instr.plain > /dev/null 2>&1 117*08b48e0bSAndroid Build Coastguard Worker SIZE=`ls -l in2/in2 2>/dev/null | awk '{print$5}'` 118*08b48e0bSAndroid Build Coastguard Worker test "$SIZE" = 1 && $ECHO "$GREEN[+] afl-tmin correctly minimized the testcase" 119*08b48e0bSAndroid Build Coastguard Worker test "$SIZE" = 1 || { 120*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] afl-tmin did incorrectly minimize the testcase to $SIZE" 121*08b48e0bSAndroid Build Coastguard Worker CODE=1 122*08b48e0bSAndroid Build Coastguard Worker } 123*08b48e0bSAndroid Build Coastguard Worker rm -rf in out errors in2 124*08b48e0bSAndroid Build Coastguard Worker unset AFL_QUIET 125*08b48e0bSAndroid Build Coastguard Worker } 126*08b48e0bSAndroid Build Coastguard Worker rm -f test-instr.plain 127*08b48e0bSAndroid Build Coastguard Worker } || { 128*08b48e0bSAndroid Build Coastguard Worker $ECHO "$YELLOW[-] afl-gcc executes clang, cannot test!" 129*08b48e0bSAndroid Build Coastguard Worker INCOMPLETE=1 130*08b48e0bSAndroid Build Coastguard Worker } 131*08b48e0bSAndroid Build Coastguard Worker } || { 132*08b48e0bSAndroid Build Coastguard Worker $ECHO "$YELLOW[-] afl is not compiled, cannot test" 133*08b48e0bSAndroid Build Coastguard Worker INCOMPLETE=1 134*08b48e0bSAndroid Build Coastguard Worker } 135*08b48e0bSAndroid Build Coastguard Worker 136*08b48e0bSAndroid Build Coastguard Worker AFL_CLANG=afl-clang 137*08b48e0bSAndroid Build Coastguard Worker $ECHO "$BLUE[*] Testing: ${AFL_CLANG}, afl-showmap, afl-fuzz, afl-cmin and afl-tmin" 138*08b48e0bSAndroid Build Coastguard Worker SKIP= 139*08b48e0bSAndroid Build Coastguard Worker test -e ../${AFL_CLANG} -a -e ../afl-showmap -a -e ../afl-fuzz && { 140*08b48e0bSAndroid Build Coastguard Worker ../${AFL_CLANG} -v 2>&1 | grep -qi "clang version" && { 141*08b48e0bSAndroid Build Coastguard Worker ../${AFL_CLANG} -O0 -o test-instr.plain ../test-instr.c > /dev/null 2>&1 142*08b48e0bSAndroid Build Coastguard Worker AFL_HARDEN=1 ../${AFL_CLANG} -o test-compcov.harden test-compcov.c > /dev/null 2>&1 143*08b48e0bSAndroid Build Coastguard Worker test -e test-instr.plain && { 144*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] ${AFL_CLANG} compilation succeeded" 145*08b48e0bSAndroid Build Coastguard Worker echo 0 | AFL_QUIET=1 ../afl-showmap -m ${MEM_LIMIT} -o test-instr.plain.0 -r -- ./test-instr.plain > /dev/null 2>&1 146*08b48e0bSAndroid Build Coastguard Worker AFL_QUIET=1 ../afl-showmap -m ${MEM_LIMIT} -o test-instr.plain.1 -r -- ./test-instr.plain < /dev/null > /dev/null 2>&1 147*08b48e0bSAndroid Build Coastguard Worker test -e test-instr.plain.0 -a -e test-instr.plain.1 && { 148*08b48e0bSAndroid Build Coastguard Worker diff test-instr.plain.0 test-instr.plain.1 > /dev/null 2>&1 && { 149*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] ${AFL_CLANG} instrumentation should be different on different input but is not" 150*08b48e0bSAndroid Build Coastguard Worker CODE=1 151*08b48e0bSAndroid Build Coastguard Worker } || { 152*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] ${AFL_CLANG} instrumentation present and working correctly" 153*08b48e0bSAndroid Build Coastguard Worker } 154*08b48e0bSAndroid Build Coastguard Worker } || { 155*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] ${AFL_CLANG} instrumentation failed" 156*08b48e0bSAndroid Build Coastguard Worker CODE=1 157*08b48e0bSAndroid Build Coastguard Worker } 158*08b48e0bSAndroid Build Coastguard Worker rm -f test-instr.plain.0 test-instr.plain.1 159*08b48e0bSAndroid Build Coastguard Worker TUPLES=`echo 1|AFL_QUIET=1 ../afl-showmap -m ${MEM_LIMIT} -o /dev/null -- ./test-instr.plain 2>&1 | grep Captur | awk '{print$3}'` 160*08b48e0bSAndroid Build Coastguard Worker test "$TUPLES" -gt 1 -a "$TUPLES" -lt 22 && { 161*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] ${AFL_CLANG} run reported $TUPLES instrumented locations which is fine" 162*08b48e0bSAndroid Build Coastguard Worker } || { 163*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] ${AFL_CLANG} instrumentation produces weird numbers: $TUPLES" 164*08b48e0bSAndroid Build Coastguard Worker CODE=1 165*08b48e0bSAndroid Build Coastguard Worker } 166*08b48e0bSAndroid Build Coastguard Worker test "$TUPLES" -lt 3 && SKIP=1 167*08b48e0bSAndroid Build Coastguard Worker true # this is needed because of the test above 168*08b48e0bSAndroid Build Coastguard Worker } || { 169*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] ${AFL_CLANG} failed" 170*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 171*08b48e0bSAndroid Build Coastguard Worker uname -a 172*08b48e0bSAndroid Build Coastguard Worker ../${AFL_CLANG} -o test-instr.plain ../test-instr.c 173*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 174*08b48e0bSAndroid Build Coastguard Worker CODE=1 175*08b48e0bSAndroid Build Coastguard Worker } 176*08b48e0bSAndroid Build Coastguard Worker test -e test-compcov.harden && { 177*08b48e0bSAndroid Build Coastguard Worker nm test-compcov.harden | grep -Eq 'stack_chk_fail|fstack-protector-all|fortified' > /dev/null 2>&1 && { 178*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] ${AFL_CLANG} hardened mode succeeded and is working" 179*08b48e0bSAndroid Build Coastguard Worker } || { 180*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] ${AFL_CLANG} hardened mode is not hardened" 181*08b48e0bSAndroid Build Coastguard Worker CODE=1 182*08b48e0bSAndroid Build Coastguard Worker } 183*08b48e0bSAndroid Build Coastguard Worker rm -f test-compcov.harden 184*08b48e0bSAndroid Build Coastguard Worker } || { 185*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] ${AFL_CLANG} hardened mode compilation failed" 186*08b48e0bSAndroid Build Coastguard Worker CODE=1 187*08b48e0bSAndroid Build Coastguard Worker } 188*08b48e0bSAndroid Build Coastguard Worker # now we want to be sure that afl-fuzz is working 189*08b48e0bSAndroid Build Coastguard Worker # make sure crash reporter is disabled on Mac OS X 190*08b48e0bSAndroid Build Coastguard Worker (test "$OS" = "Darwin" && test $(launchctl list 2>/dev/null | grep -q '\.ReportCrash$') && { 191*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] we cannot run afl-fuzz with enabled crash reporter. Run 'sudo sh afl-system-config'.$RESET" 192*08b48e0bSAndroid Build Coastguard Worker true 193*08b48e0bSAndroid Build Coastguard Worker }) || { 194*08b48e0bSAndroid Build Coastguard Worker mkdir -p in 195*08b48e0bSAndroid Build Coastguard Worker echo 0 > in/in 196*08b48e0bSAndroid Build Coastguard Worker test -z "$SKIP" && { 197*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREY[*] running afl-fuzz for ${AFL_CLANG}, this will take approx 10 seconds" 198*08b48e0bSAndroid Build Coastguard Worker { 199*08b48e0bSAndroid Build Coastguard Worker ../afl-fuzz -V07 -m ${MEM_LIMIT} -i in -o out -- ./test-instr.plain >>errors 2>&1 200*08b48e0bSAndroid Build Coastguard Worker } >>errors 2>&1 201*08b48e0bSAndroid Build Coastguard Worker test -n "$( ls out/default/queue/id:000002* 2>/dev/null )" && { 202*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] afl-fuzz is working correctly with ${AFL_CLANG}" 203*08b48e0bSAndroid Build Coastguard Worker } || { 204*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 205*08b48e0bSAndroid Build Coastguard Worker cat errors 206*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 207*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] afl-fuzz is not working correctly with ${AFL_CLANG}" 208*08b48e0bSAndroid Build Coastguard Worker CODE=1 209*08b48e0bSAndroid Build Coastguard Worker } 210*08b48e0bSAndroid Build Coastguard Worker } 211*08b48e0bSAndroid Build Coastguard Worker echo 000000000000000000000000 > in/in2 212*08b48e0bSAndroid Build Coastguard Worker echo AAA > in/in2 213*08b48e0bSAndroid Build Coastguard Worker test "$OS" = "Darwin" && { 214*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREY[*] afl-cmin not available on macOS, cannot test afl-cmin" 215*08b48e0bSAndroid Build Coastguard Worker } || { 216*08b48e0bSAndroid Build Coastguard Worker mkdir -p in2 217*08b48e0bSAndroid Build Coastguard Worker ../afl-cmin -m ${MEM_LIMIT} -i in -o in2 -- ./test-instr.plain >/dev/null 2>&1 # why is afl-forkserver writing to stderr? 218*08b48e0bSAndroid Build Coastguard Worker CNT=`ls in2/* 2>/dev/null | wc -l` 219*08b48e0bSAndroid Build Coastguard Worker case "$CNT" in 220*08b48e0bSAndroid Build Coastguard Worker *2) $ECHO "$GREEN[+] afl-cmin correctly minimized the number of testcases" ;; 221*08b48e0bSAndroid Build Coastguard Worker \ *1|1) { # allow leading whitecase for portability 222*08b48e0bSAndroid Build Coastguard Worker test -s in2/* && $ECHO "$YELLOW[?] afl-cmin did minimize to one testcase. This can be a bug or due compiler optimization." 223*08b48e0bSAndroid Build Coastguard Worker test -s in2/* || { 224*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] afl-cmin did not correctly minimize the number of testcases ($CNT)" 225*08b48e0bSAndroid Build Coastguard Worker CODE=1 226*08b48e0bSAndroid Build Coastguard Worker } 227*08b48e0bSAndroid Build Coastguard Worker } 228*08b48e0bSAndroid Build Coastguard Worker ;; 229*08b48e0bSAndroid Build Coastguard Worker *) $ECHO "$RED[!] afl-cmin did not correctly minimize the number of testcases ($CNT)" 230*08b48e0bSAndroid Build Coastguard Worker CODE=1 231*08b48e0bSAndroid Build Coastguard Worker ;; 232*08b48e0bSAndroid Build Coastguard Worker esac 233*08b48e0bSAndroid Build Coastguard Worker rm -f in2/in* 234*08b48e0bSAndroid Build Coastguard Worker } 235*08b48e0bSAndroid Build Coastguard Worker export AFL_QUIET=1 236*08b48e0bSAndroid Build Coastguard Worker if command -v bash >/dev/null ; then { 237*08b48e0bSAndroid Build Coastguard Worker ../afl-cmin.bash -m ${MEM_LIMIT} -i in -o in2 -- ./test-instr.plain >/dev/null 238*08b48e0bSAndroid Build Coastguard Worker CNT=`ls in2/* 2>/dev/null | wc -l` 239*08b48e0bSAndroid Build Coastguard Worker case "$CNT" in 240*08b48e0bSAndroid Build Coastguard Worker *2) $ECHO "$GREEN[+] afl-cmin.bash correctly minimized the number of testcases" ;; 241*08b48e0bSAndroid Build Coastguard Worker \ *1|1) { # allow leading whitecase for portability 242*08b48e0bSAndroid Build Coastguard Worker test -s in2/* && $ECHO "$YELLOW[?] afl-cmin.bash did minimize to one testcase. This can be a bug or due compiler optimization." 243*08b48e0bSAndroid Build Coastguard Worker test -s in2/* || { 244*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] afl-cmin.bash did not correctly minimize the number of testcases ($CNT)" 245*08b48e0bSAndroid Build Coastguard Worker CODE=1 246*08b48e0bSAndroid Build Coastguard Worker } 247*08b48e0bSAndroid Build Coastguard Worker } 248*08b48e0bSAndroid Build Coastguard Worker ;; 249*08b48e0bSAndroid Build Coastguard Worker *) $ECHO "$RED[!] afl-cmin.bash did not correctly minimize the number of testcases ($CNT)" 250*08b48e0bSAndroid Build Coastguard Worker CODE=1 251*08b48e0bSAndroid Build Coastguard Worker ;; 252*08b48e0bSAndroid Build Coastguard Worker esac 253*08b48e0bSAndroid Build Coastguard Worker } else { 254*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREY[*] no bash available, cannot test afl-cmin.bash" 255*08b48e0bSAndroid Build Coastguard Worker } 256*08b48e0bSAndroid Build Coastguard Worker fi 257*08b48e0bSAndroid Build Coastguard Worker ../afl-tmin -m ${MEM_LIMIT} -i in/in2 -o in2/in2 -- ./test-instr.plain > /dev/null 2>&1 258*08b48e0bSAndroid Build Coastguard Worker SIZE=`ls -l in2/in2 2>/dev/null | awk '{print$5}'` 259*08b48e0bSAndroid Build Coastguard Worker test "$SIZE" = 1 && $ECHO "$GREEN[+] afl-tmin correctly minimized the testcase" 260*08b48e0bSAndroid Build Coastguard Worker test "$SIZE" = 1 || { 261*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] afl-tmin did incorrectly minimize the testcase to $SIZE" 262*08b48e0bSAndroid Build Coastguard Worker CODE=1 263*08b48e0bSAndroid Build Coastguard Worker } 264*08b48e0bSAndroid Build Coastguard Worker rm -rf in out errors in2 265*08b48e0bSAndroid Build Coastguard Worker unset AFL_QUIET 266*08b48e0bSAndroid Build Coastguard Worker } 267*08b48e0bSAndroid Build Coastguard Worker rm -f test-instr.plain 268*08b48e0bSAndroid Build Coastguard Worker } || { 269*08b48e0bSAndroid Build Coastguard Worker $ECHO "$YELLOW[-] afl-clang executes gcc, cannot test" 270*08b48e0bSAndroid Build Coastguard Worker INCOMPLETE=1 271*08b48e0bSAndroid Build Coastguard Worker } 272*08b48e0bSAndroid Build Coastguard Worker } || { 273*08b48e0bSAndroid Build Coastguard Worker $ECHO "$YELLOW[-] afl is not compiled, cannot test" 274*08b48e0bSAndroid Build Coastguard Worker INCOMPLETE=1 275*08b48e0bSAndroid Build Coastguard Worker } 276*08b48e0bSAndroid Build Coastguard Worker} || { 277*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREY[*] not an intel platform, skipped tests of afl-gcc" 278*08b48e0bSAndroid Build Coastguard Worker #this is not incomplete as this feature doesnt exist, so all good 279*08b48e0bSAndroid Build Coastguard Worker AFL_TEST_COUNT=$((AFL_TEST_COUNT-1)) 280*08b48e0bSAndroid Build Coastguard Worker} 281*08b48e0bSAndroid Build Coastguard Worker 282*08b48e0bSAndroid Build Coastguard Worker. ./test-post.sh 283