wireshark/tools/test-common.sh
Evan Huus aafe8b18e9 Remove the wmem slab. It was an optimization mimicking the emem slab
(removed in r48218) which did nothing particularly useful. Also lets us remove
another debugging environment variable.

svn path=/trunk/; revision=48219
2013-03-09 20:16:33 +00:00

145 lines
5 KiB
Bash
Executable file

#!/bin/bash
#
# $Id$
# Common variables and functions for fuzz and randpkt tests.
# This needs to point to a 'date' that supports %s.
if [ -z "$TEST_TYPE" ] ; then
echo "TEST_TYPE must be defined by the sourcing script."
exit 1
fi
DATE=/bin/date
BASE_NAME=$TEST_TYPE-`$DATE +%Y-%m-%d`-$$
# Directory containing binaries. Default current directory.
BIN_DIR=.
# Temporary file directory and names.
# (had problems with this on cygwin, tried TMP_DIR=./ which worked)
TMP_DIR=/tmp
if [ "$OSTYPE" == "cygwin" ] ; then
TMP_DIR=`cygpath --windows "$TMP_DIR"`
fi
TMP_FILE=$BASE_NAME.pcap
ERR_FILE=$BASE_NAME.err
# Loop this many times (< 1 loops forever)
MAX_PASSES=0
# These may be set to your liking
# Stop the child process if it's running longer than x seconds
MAX_CPU_TIME=300
# Stop the child process if it's using more than y * 1024 bytes
MAX_VMEM=500000
# Stop the child process if its stack is larger than than z * 1024 bytes
# Windows XP: 2033
# Windows 7: 2034
# OS X 10.6: 8192
# Linux 2.6.24: 8192
# Solaris 10: 8192
MAX_STACK=2033
# Insert z times an error into the capture file (0.02 seems to be a good value to find errors)
ERR_PROB=0.02
# Tweak the following to your liking. Editcap must support "-E".
TSHARK="$BIN_DIR/tshark"
EDITCAP="$BIN_DIR/editcap"
CAPINFOS="$BIN_DIR/capinfos"
RANDPKT="$BIN_DIR/randpkt"
if [ "$BIN_DIR" = "." ]; then
export WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1
fi
##############################################################################
### Set up environment variables for fuzz testing ###
##############################################################################
# Initialize (ep_ and se_) allocated memory to 0xBADDCAFE and freed memory
# to 0xDEADBEEF
export WIRESHARK_DEBUG_SCRUB_MEMORY=
# Use canaries in se_ allocations (off by default due to the memory usage)
export WIRESHARK_DEBUG_SE_USE_CANARY=
# Verify that ep_ and se_ allocated memory is not passed to certain routines
# which need the memory to be persistent.
export WIRESHARK_EP_VERIFY_POINTERS=
export WIRESHARK_SE_VERIFY_POINTERS=
# Use the Wmem strict allocator which does canaries and scrubbing etc.
export WIRESHARK_DEBUG_WMEM_OVERRIDE=strict
# Turn on GLib memory debugging (since 2.13)
export G_SLICE=debug-blocks
# Cause glibc (Linux) to abort() if some memory errors are found
export MALLOC_CHECK_=3
# Cause FreeBSD (and other BSDs) to abort() on allocator warnings and
# initialize allocated memory (to 0xa5) and freed memory (to 0x5a). see:
# http://www.freebsd.org/cgi/man.cgi?query=malloc&apropos=0&sektion=0&manpath=FreeBSD+8.2-RELEASE&format=html
export MALLOC_OPTIONS=AJ
# MacOS options; see http://developer.apple.com/library/mac/releasenotes/DeveloperTools/RN-MallocOptions/_index.html
# Initialize allocated memory to 0xAA and freed memory to 0x55
export MallocPreScribble=1
export MallocScribble=1
# Add guard pages before and after large allocations
export MallocGuardEdges=1
# Call abort() if heap corruption is detected. Heap is checked every 1000
# allocations (may need to be tuned!)
export MallocCheckHeapStart=1000
export MallocCheckHeapEach=1000
export MallocCheckHeapAbort=1
# Call abort() if an illegal free() call is made
export MallocBadFreeAbort=1
# Create an error report
function exit_error() {
echo -e "\n ERROR"
echo -e "Processing failed. Capture info follows:\n"
echo " Input file: $CF"
# Fill in build information
echo -e "Input file: $CF\n" > $TMP_DIR/${ERR_FILE}.header
echo -e "Build host information:" >> $TMP_DIR/${ERR_FILE}.header
uname -a >> $TMP_DIR/${ERR_FILE}.header
lsb_release -a >> $TMP_DIR/${ERR_FILE}.header 2> /dev/null
if [ -n "$BUILDBOT_BUILDERNAME" ] ; then
echo -e "\nBuildbot information:" >> $TMP_DIR/${ERR_FILE}.header
env | grep "^BUILDBOT_" >> $TMP_DIR/${ERR_FILE}.header
fi
echo -e "\nReturn value: " $RETVAL >> $TMP_DIR/${ERR_FILE}.header
echo -e "\nDissector bug: " $DISSECTOR_BUG >> $TMP_DIR/${ERR_FILE}.header
echo -e "\nValgrind error count: " $VG_ERR_CNT >> $TMP_DIR/${ERR_FILE}.header
echo -e "\n" >> $TMP_DIR/${ERR_FILE}.header
if [ -d .svn ] ; then
echo -e "\nSubversion revision" >> $TMP_DIR/${ERR_FILE}.header
svn log -l 1 >> $TMP_DIR/${ERR_FILE}.header
elif [ -d .git ] ; then
echo -e "\nGit commit" >> $TMP_DIR/${ERR_FILE}.header
git log -1 >> $TMP_DIR/${ERR_FILE}.header
fi
echo -e "\n" >> $TMP_DIR/${ERR_FILE}.header
# Trim the stderr output if needed
ERR_SIZE=$(du -sk $TMP_DIR/$ERR_FILE | awk '{ print $1 }')
if [ $ERR_SIZE -ge 5000 ] ; then
mv $TMP_DIR/$ERR_FILE $TMP_DIR/${ERR_FILE}.full
head -n 2000 $TMP_DIR/${ERR_FILE}.full > $TMP_DIR/$ERR_FILE
echo -e "\n\n[ Output removed ]\n\n" >> $TMP_DIR/$ERR_FILE
tail -n 2000 $TMP_DIR/${ERR_FILE}.full >> $TMP_DIR/$ERR_FILE
rm -f $TMP_DIR/${ERR_FILE}.full
fi
cat $TMP_DIR/${ERR_FILE} >> $TMP_DIR/${ERR_FILE}.header
mv $TMP_DIR/${ERR_FILE}.header $TMP_DIR/${ERR_FILE}
echo -e "stderr follows:\n"
cat $TMP_DIR/$ERR_FILE
exit 1
}