68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/bash -eu
 | |
| # Copyright 2020 Google Inc.
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #      http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| #
 | |
| ################################################################################
 | |
| 
 | |
| for PROJECT in ${SRC}/*;
 | |
| do
 | |
|   PROJECT=$(basename ${PROJECT})
 | |
| 
 | |
|   # A libyal project should have an ossfuzz directory and a synclibs.sh script.
 | |
|   if ! test -d ${SRC}/${PROJECT}/ossfuzz || ! test -x ${SRC}/${PROJECT}/synclibs.sh;
 | |
|   then
 | |
|     continue
 | |
|   fi
 | |
|   cd ${SRC}/${PROJECT}
 | |
| 
 | |
|   # Prepare the project source for build.
 | |
|   ./synclibs.sh
 | |
|   ./autogen.sh
 | |
|   ./configure --enable-shared=no
 | |
| 
 | |
|   # Build the project and fuzzer binaries.
 | |
|   make -j$(nproc) LIB_FUZZING_ENGINE=${LIB_FUZZING_ENGINE}
 | |
| 
 | |
|   # Download the test data if supported.
 | |
|   if test -x ./synctestdata.sh;
 | |
|   then
 | |
|     ./synctestdata.sh
 | |
|   fi
 | |
| 
 | |
|   # Copy the fuzzer binaries and test data to the output directory.
 | |
|   for FUZZ_TARGET in $(cd ossfuzz && find . -executable -type f);
 | |
|   do
 | |
|     FUZZ_TARGET=$(basename ${FUZZ_TARGET})
 | |
| 
 | |
|     # Prefix the fuzzer binaries with the project name.
 | |
|     cp ossfuzz/${FUZZ_TARGET} ${OUT}/${PROJECT}_${FUZZ_TARGET}
 | |
| 
 | |
|     # Download the test data if supported.
 | |
|     LIBYAL_TYPE_NAME=${FUZZ_TARGET/_fuzzer/};
 | |
| 
 | |
|     if test -f tests/data/${LIBYAL_TYPE_NAME/}.1;
 | |
|     then
 | |
|       (cd tests/data && zip ${OUT}/${PROJECT}_${FUZZ_TARGET}_seed_corpus.zip ${LIBYAL_TYPE_NAME}.*)
 | |
| 
 | |
|     elif test -d tests/input/public;
 | |
|     then
 | |
|       (cd tests/input/public && zip ${OUT}/${PROJECT}_${FUZZ_TARGET}_seed_corpus.zip *)
 | |
| 
 | |
|     else
 | |
|       echo "Missing test data for seed corpus."
 | |
|       exit 1
 | |
|     fi
 | |
|   done
 | |
| done
 |