xref: /aosp_15_r20/external/AFLplusplus/test/test-basic.sh (revision 08b48e0b10e97b33e7b60c5b6e2243bd915777f2)
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