Explorar o código

Fix corpus generation to generate separate interaction files

An interaction file contains the first HEL message until the CLO message
Stefan Profanter %!s(int64=7) %!d(string=hai) anos
pai
achega
bbe04ceb3a
Modificáronse 23 ficheiros con 64 adicións e 6 borrados
  1. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/1d6d4004d0a22c324410fd9df02d7477c1c66f79
  2. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/2469be236b03b891b0371fc00f659be7ecaf48a5
  3. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/2bb7608575acec126e3dd72a71c98b45756cdc17
  4. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/2e985938f94ec3ffb5d68fdea9f7a57527300c54
  5. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/3571f2e3699024bbd13426c1c1e0fb6a2be080b7
  6. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/3cbe2dd022994d8b2aecf44d85207c45d270283b
  7. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/4d008f20a34ba50a523a62d6b5449935f1ad3125
  8. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/61861286a164b848cf3ba3460ac43de4299e055d
  9. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/6fdcec03ea094f77554f81c634d752d7372176f2
  10. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/8c7195ba09cde70328ce616296580f88c1868ce9
  11. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/8c8167bbf8c029729fde0630d4f00873058780a2
  12. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/92f427417e4c921678f4a65a71dd77feadedb93b
  13. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/a270c77f33c26631155c04840ef4c8d439ca4c3c
  14. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/a3c5ab14ba9ffd6223884e498c01eb5810bcfa4e
  15. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/a64af70c8e80f73918426271b02f2a43dfdf3c58
  16. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/af1c80d18c06c16ba6067c3cf9526e04c5682f5a
  17. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/b7568f0dc026fa16ca737c6643353ac75b79c149
  18. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/c2fb2f84b3a8728dae08e2aa958f9867dfb22957
  19. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/ddf2be2fcdaa07a3d7adf0cd9d3c5c8339d97fff
  20. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/e7710c8ad29b5310c48e3fcfdf01195c210048f6
  21. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/fb25a4ecaf4c6d0bfb4be1438d65ad3ee7a880e9
  22. BIN=BIN
      tests/fuzz/fuzz_binary_message_corpus/generated/fbef981b62c06122e22da3512d733cb51f093795
  23. 64 6
      tests/fuzz/generate_corpus.sh

BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/1d6d4004d0a22c324410fd9df02d7477c1c66f79


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/2469be236b03b891b0371fc00f659be7ecaf48a5


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/2bb7608575acec126e3dd72a71c98b45756cdc17


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/2e985938f94ec3ffb5d68fdea9f7a57527300c54


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/3571f2e3699024bbd13426c1c1e0fb6a2be080b7


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/3cbe2dd022994d8b2aecf44d85207c45d270283b


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/4d008f20a34ba50a523a62d6b5449935f1ad3125


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/61861286a164b848cf3ba3460ac43de4299e055d


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/6fdcec03ea094f77554f81c634d752d7372176f2


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/8c7195ba09cde70328ce616296580f88c1868ce9


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/8c8167bbf8c029729fde0630d4f00873058780a2


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/92f427417e4c921678f4a65a71dd77feadedb93b


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/a270c77f33c26631155c04840ef4c8d439ca4c3c


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/a3c5ab14ba9ffd6223884e498c01eb5810bcfa4e


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/a64af70c8e80f73918426271b02f2a43dfdf3c58


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/af1c80d18c06c16ba6067c3cf9526e04c5682f5a


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/b7568f0dc026fa16ca737c6643353ac75b79c149


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/c2fb2f84b3a8728dae08e2aa958f9867dfb22957


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/ddf2be2fcdaa07a3d7adf0cd9d3c5c8339d97fff


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/e7710c8ad29b5310c48e3fcfdf01195c210048f6


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/fb25a4ecaf4c6d0bfb4be1438d65ad3ee7a880e9


BIN=BIN
tests/fuzz/fuzz_binary_message_corpus/generated/fbef981b62c06122e22da3512d733cb51f093795


+ 64 - 6
tests/fuzz/generate_corpus.sh

@@ -23,12 +23,13 @@ if [ -d "$BUILD_DIR_CORPUS/corpus" ]; then
     rm -rf "$BUILD_DIR_CORPUS/corpus"
 fi
 
-if [ $TRAVIS = true ]; then
-	export CC=clang-3.9
-	export CXX=clang++-3.9
-else
+if [ -z ${TRAVIS+x} ]; then
 	export CC=clang-5.0
 	export CXX=clang++-5.0
+else
+	# Travis needs an older clang
+	export CC=clang-3.9
+	export CXX=clang++-3.9
 fi
 # First build and run the unit tests without any specific fuzz settings
 cmake -DUA_BUILD_FUZZING_CORPUS=ON -DUA_BUILD_UNIT_TESTS=ON ..
@@ -51,7 +52,7 @@ merge_corpus() {
 
 
     if [ -d "$corpus_existing" ]; then
-        echo "Merging ${corpus_existing} into ${corpus_new}"
+        echo "Merging ${corpus_new} into ${corpus_existing}"
         "$fuzzer" -merge=1 "$corpus_existing" "${corpus_new}"
     else
         echo "Copying ${corpus_new} into ${corpus_existing}"
@@ -60,5 +61,62 @@ merge_corpus() {
 }
 
 
-merge_corpus $BUILD_DIR_FUZZ_MODE/bin/fuzz_binary_message $BASE_DIR/tests/fuzz/fuzz_binary_message_corpus/generated $BUILD_DIR_CORPUS/corpus
+# Iterate over all files and combine single message files to a full interaction, i.e.,
+# After running the corpus generator, the output directory contains single files for each
+# message (HEL, OPN, MSG..., CLO). Fuzzer needs these files to be combined into one single file
+
+
+
+
+
+CORPUS_SINGLE=$BUILD_DIR_CORPUS/corpus
+CORPUS_COMBINED=$BUILD_DIR_CORPUS/corpus_combined
+
+if [ -d  $CORPUS_COMBINED ]; then
+	rm -r $CORPUS_COMBINED
+fi
+mkdir $CORPUS_COMBINED
+
+
+
+
+
+# iterate over all the subdirectories
+subDirs=$(find $CORPUS_SINGLE -maxdepth 1 -mindepth 1 -type d)
+for dirPath in $subDirs; do
+	# if empty, skip
+	if ! [ -n "$(ls -A $dirPath)" ]; then
+		echo "Skipping empty $dirPath"
+		continue
+	fi
+
+	dir=$(basename $dirPath)
+	dirPathTmp=$CORPUS_COMBINED/${dir}
+	if [ -d  $dirPathTmp ]; then
+		rm -r $dirPathTmp
+	fi
+	mkdir $dirPathTmp
+
+	# The files are ordered by interaction. So we start with the first file
+	# and combine all of them until we get the CLO file.
+	# Then we start a new file and combine them again.
+
+	currCount=1
+
+	binFiles=$(find $dirPath -type f -name *.bin -printf '%h\0%d\0%p\n' | sort -t '\0' -n | awk -F '\0' '{print $3}')
+	for binFile in $binFiles; do
+
+		#echo "Combining $binFile to $dirPathTmp/msg_${currCount}.bin"
+		cat $binFile >> $dirPathTmp/${dir}_msg_${currCount}.bin
+
+		# if it is a close message, start new message
+		if [[ "$binFile" == *clo.bin ]]; then
+			currCount=$((currCount+1))
+		fi
+	done
+done
+
+
+
+merge_corpus $BUILD_DIR_FUZZ_MODE/bin/fuzz_binary_message $BASE_DIR/tests/fuzz/fuzz_binary_message_corpus/generated $CORPUS_COMBINED
 if [ $? -ne 0 ] ; then exit 1 ; fi