xref: /aosp_15_r20/external/AFLplusplus/test/test-unicorn-mode.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 Worker$ECHO "$BLUE[*] Testing: unicorn_mode"
6*08b48e0bSAndroid Build Coastguard Workertest -d ../unicorn_mode/unicornafl -a -e ../unicorn_mode/unicornafl/Makefile && {
7*08b48e0bSAndroid Build Coastguard Worker  test -e ../unicorn_mode/samples/python_simple/simple_target.bin -a -e ../unicorn_mode/samples/compcov_x64/compcov_target.bin && {
8*08b48e0bSAndroid Build Coastguard Worker    {
9*08b48e0bSAndroid Build Coastguard Worker      # We want to see python errors etc. in logs, in case something doesn't work
10*08b48e0bSAndroid Build Coastguard Worker      export AFL_DEBUG_CHILD=1
11*08b48e0bSAndroid Build Coastguard Worker
12*08b48e0bSAndroid Build Coastguard Worker      # some python version should be available now
13*08b48e0bSAndroid Build Coastguard Worker      PYTHONS="`command -v python3` `command -v python` `command -v python2`"
14*08b48e0bSAndroid Build Coastguard Worker      EASY_INSTALL_FOUND=0
15*08b48e0bSAndroid Build Coastguard Worker      for PYTHON in $PYTHONS ; do
16*08b48e0bSAndroid Build Coastguard Worker
17*08b48e0bSAndroid Build Coastguard Worker        if $PYTHON -c "import setuptools" ; then
18*08b48e0bSAndroid Build Coastguard Worker
19*08b48e0bSAndroid Build Coastguard Worker            EASY_INSTALL_FOUND=1
20*08b48e0bSAndroid Build Coastguard Worker            PY=$PYTHON
21*08b48e0bSAndroid Build Coastguard Worker            break
22*08b48e0bSAndroid Build Coastguard Worker
23*08b48e0bSAndroid Build Coastguard Worker        fi
24*08b48e0bSAndroid Build Coastguard Worker
25*08b48e0bSAndroid Build Coastguard Worker      done
26*08b48e0bSAndroid Build Coastguard Worker      if [ "0" = $EASY_INSTALL_FOUND ]; then
27*08b48e0bSAndroid Build Coastguard Worker
28*08b48e0bSAndroid Build Coastguard Worker        echo "[-] Error: Python setup-tools not found. Run 'sudo apt-get install python-setuptools'."
29*08b48e0bSAndroid Build Coastguard Worker        PREREQ_NOTFOUND=1
30*08b48e0bSAndroid Build Coastguard Worker
31*08b48e0bSAndroid Build Coastguard Worker      fi
32*08b48e0bSAndroid Build Coastguard Worker
33*08b48e0bSAndroid Build Coastguard Worker
34*08b48e0bSAndroid Build Coastguard Worker      cd ../unicorn_mode/samples/persistent
35*08b48e0bSAndroid Build Coastguard Worker      make >>errors 2>&1
36*08b48e0bSAndroid Build Coastguard Worker      $ECHO "$GREY[*] running afl-fuzz for unicorn_mode (persistent), this will take approx 25 seconds"
37*08b48e0bSAndroid Build Coastguard Worker      AFL_DEBUG_CHILD=1 ../../../afl-fuzz -m none -V15 -U -i sample_inputs -o out -d -- ./harness @@ >>errors 2>&1
38*08b48e0bSAndroid Build Coastguard Worker      test -n "$( ls out/default/queue/id:000002* 2>/dev/null )" && {
39*08b48e0bSAndroid Build Coastguard Worker        $ECHO "$GREEN[+] afl-fuzz is working correctly with unicorn_mode (persistent)"
40*08b48e0bSAndroid Build Coastguard Worker      } || {
41*08b48e0bSAndroid Build Coastguard Worker        echo CUT------------------------------------------------------------------CUT
42*08b48e0bSAndroid Build Coastguard Worker        cat errors
43*08b48e0bSAndroid Build Coastguard Worker        echo CUT------------------------------------------------------------------CUT
44*08b48e0bSAndroid Build Coastguard Worker        $ECHO "$RED[!] afl-fuzz is not working correctly with unicorn_mode (persistent)"
45*08b48e0bSAndroid Build Coastguard Worker        CODE=1
46*08b48e0bSAndroid Build Coastguard Worker      }
47*08b48e0bSAndroid Build Coastguard Worker
48*08b48e0bSAndroid Build Coastguard Worker      rm -rf out errors >/dev/null
49*08b48e0bSAndroid Build Coastguard Worker      make clean >/dev/null
50*08b48e0bSAndroid Build Coastguard Worker      cd ../../../test
51*08b48e0bSAndroid Build Coastguard Worker
52*08b48e0bSAndroid Build Coastguard Worker      # travis workaround
53*08b48e0bSAndroid Build Coastguard Worker      test "$PY" = "/opt/pyenv/shims/python" -a -x /usr/bin/python && PY=/usr/bin/python
54*08b48e0bSAndroid Build Coastguard Worker      mkdir -p in
55*08b48e0bSAndroid Build Coastguard Worker      echo 0 > in/in
56*08b48e0bSAndroid Build Coastguard Worker      $ECHO "$GREY[*] Using python binary $PY"
57*08b48e0bSAndroid Build Coastguard Worker      if ! $PY -c 'import unicornafl' 2>/dev/null ; then
58*08b48e0bSAndroid Build Coastguard Worker        $ECHO "$YELLOW[-] we cannot test unicorn_mode for python because it is not present"
59*08b48e0bSAndroid Build Coastguard Worker        INCOMPLETE=1
60*08b48e0bSAndroid Build Coastguard Worker      else
61*08b48e0bSAndroid Build Coastguard Worker      {
62*08b48e0bSAndroid Build Coastguard Worker        $ECHO "$GREY[*] running afl-fuzz for unicorn_mode in python, this will take approx 25 seconds"
63*08b48e0bSAndroid Build Coastguard Worker        {
64*08b48e0bSAndroid Build Coastguard Worker          ../afl-fuzz -m ${MEM_LIMIT} -V15 -U -i in -o out -d -- "$PY" ../unicorn_mode/samples/python_simple/simple_test_harness.py @@ >>errors 2>&1
65*08b48e0bSAndroid Build Coastguard Worker        } >>errors 2>&1
66*08b48e0bSAndroid Build Coastguard Worker        test -n "$( ls out/default/queue/id:000002* 2>/dev/null )" && {
67*08b48e0bSAndroid Build Coastguard Worker          $ECHO "$GREEN[+] afl-fuzz is working correctly with unicorn_mode"
68*08b48e0bSAndroid Build Coastguard Worker        } || {
69*08b48e0bSAndroid Build Coastguard Worker          echo CUT------------------------------------------------------------------CUT
70*08b48e0bSAndroid Build Coastguard Worker          cat errors
71*08b48e0bSAndroid Build Coastguard Worker          echo CUT------------------------------------------------------------------CUT
72*08b48e0bSAndroid Build Coastguard Worker          $ECHO "$RED[!] afl-fuzz is not working correctly with unicorn_mode"
73*08b48e0bSAndroid Build Coastguard Worker          CODE=1
74*08b48e0bSAndroid Build Coastguard Worker        }
75*08b48e0bSAndroid Build Coastguard Worker        rm -f errors
76*08b48e0bSAndroid Build Coastguard Worker
77*08b48e0bSAndroid Build Coastguard Worker        printf '\x01\x01' > in/in
78*08b48e0bSAndroid Build Coastguard Worker        # This seed is close to the first byte of the comparison.
79*08b48e0bSAndroid Build Coastguard Worker        # If CompCov works, a new tuple will appear in the map => new input in queue
80*08b48e0bSAndroid Build Coastguard Worker        $ECHO "$GREY[*] running afl-fuzz for unicorn_mode compcov, this will take approx 35 seconds"
81*08b48e0bSAndroid Build Coastguard Worker        {
82*08b48e0bSAndroid Build Coastguard Worker          export AFL_COMPCOV_LEVEL=2
83*08b48e0bSAndroid Build Coastguard Worker          ../afl-fuzz -m ${MEM_LIMIT} -V15 -U -i in -o out -d -- "$PY" ../unicorn_mode/samples/compcov_x64/compcov_test_harness.py @@ >>errors 2>&1
84*08b48e0bSAndroid Build Coastguard Worker          unset AFL_COMPCOV_LEVEL
85*08b48e0bSAndroid Build Coastguard Worker        } >>errors 2>&1
86*08b48e0bSAndroid Build Coastguard Worker        test -n "$( ls out/default/queue/id:000001* 2>/dev/null )" && {
87*08b48e0bSAndroid Build Coastguard Worker          $ECHO "$GREEN[+] afl-fuzz is working correctly with unicorn_mode compcov"
88*08b48e0bSAndroid Build Coastguard Worker        } || {
89*08b48e0bSAndroid Build Coastguard Worker          echo CUT------------------------------------------------------------------CUT
90*08b48e0bSAndroid Build Coastguard Worker          cat errors
91*08b48e0bSAndroid Build Coastguard Worker          echo CUT------------------------------------------------------------------CUT
92*08b48e0bSAndroid Build Coastguard Worker          $ECHO "$RED[!] afl-fuzz is not working correctly with unicorn_mode compcov"
93*08b48e0bSAndroid Build Coastguard Worker          CODE=1
94*08b48e0bSAndroid Build Coastguard Worker        }
95*08b48e0bSAndroid Build Coastguard Worker        rm -rf in out errors
96*08b48e0bSAndroid Build Coastguard Worker      }
97*08b48e0bSAndroid Build Coastguard Worker      fi
98*08b48e0bSAndroid Build Coastguard Worker
99*08b48e0bSAndroid Build Coastguard Worker      unset AFL_DEBUG_CHILD
100*08b48e0bSAndroid Build Coastguard Worker
101*08b48e0bSAndroid Build Coastguard Worker    }
102*08b48e0bSAndroid Build Coastguard Worker  } || {
103*08b48e0bSAndroid Build Coastguard Worker    $ECHO "$RED[!] missing sample binaries in unicorn_mode/samples/ - what is going on??"
104*08b48e0bSAndroid Build Coastguard Worker    CODE=1
105*08b48e0bSAndroid Build Coastguard Worker  }
106*08b48e0bSAndroid Build Coastguard Worker
107*08b48e0bSAndroid Build Coastguard Worker} || {
108*08b48e0bSAndroid Build Coastguard Worker  $ECHO "$YELLOW[-] unicorn_mode is not compiled, cannot test"
109*08b48e0bSAndroid Build Coastguard Worker  INCOMPLETE=1
110*08b48e0bSAndroid Build Coastguard Worker}
111*08b48e0bSAndroid Build Coastguard Worker
112*08b48e0bSAndroid Build Coastguard Worker. ./test-post.sh
113