xref: /aosp_15_r20/external/AFLplusplus/afl-addseeds (revision 08b48e0b10e97b33e7b60c5b6e2243bd915777f2)
1*08b48e0bSAndroid Build Coastguard Worker#!/bin/sh
2*08b48e0bSAndroid Build Coastguard Worker
3*08b48e0bSAndroid Build Coastguard Workertest -z "$1" -o "$1" = "-h" -o "$1" = "--help" && {
4*08b48e0bSAndroid Build Coastguard Worker  echo Syntax: afl-addseeds -o afl-out-dir [-i seed_file_or_dir] seed_file_or_seed_dir seed_file_or_seed_dir ...
5*08b48e0bSAndroid Build Coastguard Worker  echo
6*08b48e0bSAndroid Build Coastguard Worker  echo Options:
7*08b48e0bSAndroid Build Coastguard Worker  echo "  -o afl-out-dir       the output directory being used in the fuzzing campaign"
8*08b48e0bSAndroid Build Coastguard Worker  echo "  -i seed_file_or_dir  file or directory of files to add"
9*08b48e0bSAndroid Build Coastguard Worker  echo
10*08b48e0bSAndroid Build Coastguard Worker  echo Adds new seeds to an existing AFL++ fuzzing campaign.
11*08b48e0bSAndroid Build Coastguard Worker  exit 0
12*08b48e0bSAndroid Build Coastguard Worker}
13*08b48e0bSAndroid Build Coastguard Worker
14*08b48e0bSAndroid Build Coastguard Workerfor TOOL in find ls; do
15*08b48e0bSAndroid Build Coastguard Worker  X=`which $TOOL`
16*08b48e0bSAndroid Build Coastguard Worker  test -n "$X" || { echo "Error: required tool '$TOOL' not found."; exit 1; }
17*08b48e0bSAndroid Build Coastguard Workerdone
18*08b48e0bSAndroid Build Coastguard Worker
19*08b48e0bSAndroid Build Coastguard WorkerTEST=`printf %06d 123 2>/dev/null`
20*08b48e0bSAndroid Build Coastguard Workertest "$TEST" = "000123" || { echo "Error: required tool 'printf' not found."; exit 1; }
21*08b48e0bSAndroid Build Coastguard Worker
22*08b48e0bSAndroid Build Coastguard WorkerOUT=
23*08b48e0bSAndroid Build Coastguard WorkerNEXT=
24*08b48e0bSAndroid Build Coastguard Workerfor i in $*; do
25*08b48e0bSAndroid Build Coastguard Worker  test -n "$NEXT" && { OUT=$i ; NEXT=""; }
26*08b48e0bSAndroid Build Coastguard Worker  test "$i" = "-o" && { NEXT=1; }
27*08b48e0bSAndroid Build Coastguard Workerdone
28*08b48e0bSAndroid Build Coastguard Worker
29*08b48e0bSAndroid Build Coastguard Workertest -d "$OUT" || { echo Error: $OUT is not an existing directory; exit 1; }
30*08b48e0bSAndroid Build Coastguard WorkerOK=`ls $OUT/*/fuzzer_stats 2>/dev/null`
31*08b48e0bSAndroid Build Coastguard Workertest -n "$OK" || { echo "Error: $OUT is not an 'afl-fuzz -o ... ' output directory" ; exit 1; }
32*08b48e0bSAndroid Build Coastguard Worker
33*08b48e0bSAndroid Build Coastguard WorkerOUTDIR=$OUT/addseeds/queue
34*08b48e0bSAndroid Build Coastguard Workermkdir -p "$OUTDIR" 2>/dev/null
35*08b48e0bSAndroid Build Coastguard Workertest -d "$OUTDIR" || { echo Error: could not create $OUTDIR ; exit 1 ; }
36*08b48e0bSAndroid Build Coastguard Worker
37*08b48e0bSAndroid Build Coastguard Workerecho Adding seeds ...
38*08b48e0bSAndroid Build Coastguard WorkerNEXTID=0
39*08b48e0bSAndroid Build Coastguard Workerfor i in $*; do
40*08b48e0bSAndroid Build Coastguard Worker  test -z "$i" -o "$i" = "$OUT" -o "$i" = "-i" -o "$i" = "-o" || {
41*08b48e0bSAndroid Build Coastguard Worker    find "$i" -type f | while read FILE; do
42*08b48e0bSAndroid Build Coastguard Worker      N=xxx
43*08b48e0bSAndroid Build Coastguard Worker      while [ -n "$N" ]; do
44*08b48e0bSAndroid Build Coastguard Worker        ID=$NEXTID
45*08b48e0bSAndroid Build Coastguard Worker        N=`ls "$OUTDIR/id:$(printf %06d $ID),"* 2>/dev/null`
46*08b48e0bSAndroid Build Coastguard Worker        NEXTID=$(($NEXTID + 1))
47*08b48e0bSAndroid Build Coastguard Worker      done
48*08b48e0bSAndroid Build Coastguard Worker      FN=`echo "$FILE" | sed 's/.*\///'`
49*08b48e0bSAndroid Build Coastguard Worker      cp -v "$FILE" "$OUTDIR/id:$(printf %06d $ID),time:0,execs:0,orig:$FN"
50*08b48e0bSAndroid Build Coastguard Worker    done
51*08b48e0bSAndroid Build Coastguard Worker  }
52*08b48e0bSAndroid Build Coastguard Workerdone
53*08b48e0bSAndroid Build Coastguard Worker
54*08b48e0bSAndroid Build Coastguard Workerecho Done.
55