File: minimize_and_cleanse.sh

package info (click to toggle)
simdjson 4.2.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 27,936 kB
  • sloc: cpp: 171,612; ansic: 19,122; sh: 1,126; python: 842; makefile: 47; ruby: 25; javascript: 13
file content (64 lines) | stat: -rwxr-xr-x 1,753 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/sh

# usage: fuzzer crash


fuzzer=$1

if [ ! -x $fuzzer ] ; then
  echo "arg 1 should be a fuzzer executable"
  exit 1
fi

crash=$2
if [ ! -e $crash ] ; then
  echo "arg2 should be a crashing test case"
  exit 1
fi
if [ -d $crash ] ; then
  echo "crash should be a file, not a dir"
  exit 1
fi

echo "checking that the crash crashes..."
origreport=$(mktemp --tmpdir orig_crash_report.XXXXXXXXX)
if $fuzzer $crash >$origreport 2>&1; then
  echo "your crash does not crash."
  exit 1
else
  echo "...it does."
fi

sizeofcrash=$(stat --format=%s $crash)
echo "starting to minimize crash of size $sizeofcrash..."
minimized=$(mktemp --tmpdir minimized_crash.XXXXXXXXX)
$fuzzer -minimize_crash=1 -exact_artifact_path=$minimized -max_total_time=5 $crash  >/dev/null 2>&1

sizeofminimized=$(stat --format=%s $minimized)
echo "got it down to $sizeofminimized"

echo "checking that the minimized crash crashes..."
report=$(mktemp --tmpdir minimized_crash_report.XXXXXXXXX)
if $fuzzer $minimized >$report 2>&1; then
  echo "your minimized crash does not crash."
  exit 1
else
 echo "...it does."
fi

echo "starting cleansing..."
cleansed=$(mktemp --tmpdir cleansed_crash.XXXXXXXXX)
cleansingreport=$(mktemp --tmpdir cleansing_output.XXXXXXXXX)
$fuzzer $minimized -cleanse_crash=1 -exact_artifact_path=$cleansed >$cleansingreport 2>&1

echo "checking that the cleansed crash crashes..."
report=$(mktemp --tmpdir cleansed_crash_report.XXXXXXXXX)
if $fuzzer $cleansed >$report 2>&1; then
  echo "your cleansed crash $cleansed does not crash. see cleansing report: $cleansingreport"
  exit 1
else
  echo "....it does."
fi

echo "your minimized and cleansed crash (report $origreport) is here: $cleansed and the report for the cleansed crash is here: $report"