| #! /bin/bash |
| # |
| # This file is part of the LibreOffice project. |
| # |
| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| # |
| |
| #check that zzuf is installed |
| hash zzuf &> /dev/null |
| if [ $? -eq 1 ];then |
| echo >&2 "zzuf not found. Please install and/or fix the PATH environement variable. Aborting" |
| exit -1 |
| fi |
| |
| #check that file(s) to fuzz are mentioned |
| if [[ $# -eq 0 ]]; then |
| echo "Usage: fuzzfiles.sh <list of seed files to fuzz>" |
| echo "The generated fuzzed files will be output to the current working directory" |
| echo "The fuzzed files will be named XYZ-ratio-NNNN where:" |
| echo -e "\tXYZ: the original file name" |
| echo -e "\tratio: the fuzz ratio (what % of bytes were fuzzed)" |
| echo -e "\tNNNN: the mutation # for that file and ratio combo" |
| exit -1 |
| fi |
| |
| for file in $@; do |
| if [ -d $file ]; then |
| echo "$file is a directory. Only files are allowed" |
| elif [ -e $file ]; then |
| basename=${file##*/} |
| #Sequence from 0.001 to 0.5 |
| for ratio in `seq -w 1 2 500 | sed -e 's/^/0./'`; do |
| echo "Fuzzing $file with ratio $ratio" |
| for i in {1..1000}; do |
| zzuf -r $ratio < $file > "$basename-$ratio-$i" |
| done #end of for i in {1.. |
| done #end of for ratio in ... |
| fi #end if of file vailidity check |
| done #end for file in $@ |