1#! /bin/bash 2# 3# SPDX-License-Identifier: BSD-2-Clause 4# 5# Copyright (c) 2018-2021 Gavin D. Howard and contributors. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions are met: 9# 10# * Redistributions of source code must retain the above copyright notice, this 11# list of conditions and the following disclaimer. 12# 13# * Redistributions in binary form must reproduce the above copyright notice, 14# this list of conditions and the following disclaimer in the documentation 15# and/or other materials provided with the distribution. 16# 17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 21# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27# POSSIBILITY OF SUCH DAMAGE. 28# 29 30getentry() { 31 32 if [ $# -gt 0 ]; then 33 entnum="$1" 34 else 35 entnum=0 36 fi 37 38 e=$(cat -) 39 num=$(printf '%s\n' "$e" | wc -l) 40 41 if [ "$entnum" -eq 0 ]; then 42 rand=$(printf 'irand(%s) + 1\n' "$num" | "$bcdir/bc") 43 else 44 rand="$entnum" 45 fi 46 47 ent=$(printf '%s\n' "$e" | tail -n +$rand | head -n 1) 48 49 printf '%s\n' "$ent" 50} 51 52script="$0" 53 54if [ "$#" -lt 1 ]; then 55 printf 'usage: %s dir\n' "$0" 56 exit 1 57fi 58 59d="$1" 60shift 61 62dir=$(dirname "$script") 63 64. "$dir/../functions.sh" 65 66bcdir="$dir/../bin" 67 68if [ "$d" = "bc" ]; then 69 inputs="$dir/../../inputs" 70 opts="-lq" 71elif [ "$d" = "dc" ]; then 72 inputs="$dir/../../inputs_dc" 73 opts="-x" 74else 75 err_exit "wrong type of executable" 1 76fi 77 78export ASAN_OPTIONS="abort_on_error=1" 79 80entries=$(cat "$dir/radamsa.txt") 81 82IFS=$'\n' 83 84go=1 85 86while [ "$go" -ne 0 ]; do 87 88 if [ "$d" = "bc" ]; then 89 90 entry=$(cat -- "$dir/radamsa.txt" | getentry) 91 items=$(printf '%s\n' "$entry" | radamsa -n 10) 92 93 printf '%s\n' "$items" 94 95 for i in `seq 1 10`; do 96 97 item=$(printf '%s\n' "$items" | getentry "$i") 98 99 export BC_ENV_ARGS="$item" 100 echo 'halt' | "$bcdir/$d" 101 err=$? 102 103 checkcrash "$d" "$err" "radamsa env args: \"$item\"" 104 done 105 106 fi 107 108 f=$(ls "$inputs" | getentry) 109 l=$(cat "$inputs/$f" | wc -l) 110 ll=$(printf '%s^2\n' "$l" | bc) 111 112 for i in $(seq 1 2); do 113 data=$(cat "$inputs/$f" | radamsa -n 1) 114 printf '%s\n' "$data" > "$dir/../.log_${d}_test.txt" 115 printf '%s\n' "$data" | timeout -s SIGTERM 5 "$bcdir/$d" "$opts" > /dev/null 116 err=$? 117 checkcrash "$d" "$err" "radamsa stdin" 118 done 119 120done 121