|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# parse arguments |
| 4 | +declare -a BM |
| 5 | +BM=() |
| 6 | +PROP_FILE="" |
| 7 | +WITNESS_FILE="" |
| 8 | + |
| 9 | +TOOL_BINARY=jpf-core/bin/jpf |
| 10 | +FIND_OPTIONS="-name '*.java'" |
| 11 | + |
| 12 | +while [ -n "$1" ] ; do |
| 13 | + case "$1" in |
| 14 | + --32|--64) BIT_WIDTH="${1##--}" ; shift 1 ;; |
| 15 | + --propertyfile) PROP_FILE="$2" ; shift 2 ;; |
| 16 | + --graphml-witness) WITNESS_FILE="$2" ; shift 2 ;; |
| 17 | + --version) date -r jpf-symbc/build/jpf-symbc.jar ; exit 0 ;; |
| 18 | + *) SRC=(`eval "find $1 $FIND_OPTIONS"`) ; BM=("${BM[@]}" "${SRC[@]}") ; shift 1 ;; |
| 19 | + esac |
| 20 | +done |
| 21 | + |
| 22 | +if [ -z "${BM[0]}" ] || [ -z "$PROP_FILE" ] ; then |
| 23 | + echo "Missing benchmark or property file" |
| 24 | + exit 1 |
| 25 | +fi |
| 26 | + |
| 27 | +if [ ! -s "${BM[0]}" ] || [ ! -s "$PROP_FILE" ] ; then |
| 28 | + echo "Empty benchmark or property file" |
| 29 | + exit 1 |
| 30 | +fi |
| 31 | + |
| 32 | +LOG=`mktemp -t jpf-log.XXXXXX` |
| 33 | +DIR=`mktemp -d -t jpf-benchmark.XXXXXX` |
| 34 | + |
| 35 | +trap "rm -rf $DIR" EXIT |
| 36 | + |
| 37 | +mkdir -p $DIR/target/classes |
| 38 | + |
| 39 | +/usr/lib/jvm/java-8-openjdk-amd64/bin/javac -g -cp $CLASSPATH_ADDED:$DIR/target/classes -d $DIR/target/classes "${BM[@]}" |
| 40 | + |
| 41 | +# create configuration file |
| 42 | +echo "target=Main" > $DIR/config.jpf |
| 43 | +echo "classpath=`pwd`/jpf-symbc/build/classes:$DIR/target/classes:$CLASSPATH_ADDED" >> $DIR/config.jpf |
| 44 | +echo "symbolic.dp=z3bitvector" >> $DIR/config.jpf |
| 45 | +echo "symbolic.bvlength=64" >> $DIR/config.jpf |
| 46 | +echo "search.depth_limit=13" >> $DIR/config.jpf |
| 47 | +echo "symbolic.strings=true" >> $DIR/config.jpf |
| 48 | +echo "symbolic.string_dp_timeout_ms=3000" >> $DIR/config.jpf |
| 49 | +echo "symbolic.lazy=on" >> $DIR/config.jpf |
| 50 | +echo "symbolic.arrays=true" >> $DIR/config.jpf |
| 51 | +echo $DIR/config.jpf |
| 52 | + |
| 53 | +# run SPF |
| 54 | +export LD_LIBRARY_PATH=`pwd`/lib:$LD_LIBRARY_PATH |
| 55 | +echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH" |
| 56 | +if test -z "$JVM_FLAGS"; then |
| 57 | + JVM_FLAGS="-Xmx1024m -ea" |
| 58 | +fi |
| 59 | +/usr/lib/jvm/java-8-openjdk-amd64/bin/java $JVM_FLAGS -jar $(pwd)/jpf-core/build/RunJPF.jar $DIR/config.jpf | tee $LOG |
| 60 | + |
| 61 | +# check the result |
| 62 | +grep "no errors detected" $LOG > /dev/null |
| 63 | +if [ $? -eq 0 ]; then |
| 64 | + echo "SAFE" |
| 65 | +else |
| 66 | + grep "^error.*NoUncaughtExceptionsProperty.*AssertionError" $LOG > /dev/null |
| 67 | + if [ $? -eq 0 ]; then |
| 68 | + echo "UNSAFE" |
| 69 | + else |
| 70 | + echo "UNKNOWN" |
| 71 | + fi |
| 72 | +fi |
0 commit comments