1*7c568831SAndroid Build Coastguard Worker#!/bin/bash -eu 2*7c568831SAndroid Build Coastguard Worker 3*7c568831SAndroid Build Coastguard Worker# OSS-Fuzz integration, see 4*7c568831SAndroid Build Coastguard Worker# https://github.com/google/oss-fuzz/tree/master/projects/libxml2 5*7c568831SAndroid Build Coastguard Worker 6*7c568831SAndroid Build Coastguard Worker# Add extra UBSan checks 7*7c568831SAndroid Build Coastguard Workerif [ "$SANITIZER" = undefined ]; then 8*7c568831SAndroid Build Coastguard Worker extra_checks="integer,float-divide-by-zero" 9*7c568831SAndroid Build Coastguard Worker extra_cflags="-fsanitize=$extra_checks -fno-sanitize-recover=$extra_checks" 10*7c568831SAndroid Build Coastguard Worker export CFLAGS="$CFLAGS $extra_cflags" 11*7c568831SAndroid Build Coastguard Worker export CXXFLAGS="$CXXFLAGS $extra_cflags" 12*7c568831SAndroid Build Coastguard Workerfi 13*7c568831SAndroid Build Coastguard Worker 14*7c568831SAndroid Build Coastguard Worker# Don't enable zlib and liblzma with MSan 15*7c568831SAndroid Build Coastguard Workerif [ "$SANITIZER" = memory ]; then 16*7c568831SAndroid Build Coastguard Worker CONFIG='' 17*7c568831SAndroid Build Coastguard Workerelse 18*7c568831SAndroid Build Coastguard Worker CONFIG='--with-zlib --with-lzma' 19*7c568831SAndroid Build Coastguard Workerfi 20*7c568831SAndroid Build Coastguard Worker 21*7c568831SAndroid Build Coastguard Worker# Workaround for a LeakSanitizer crashes, 22*7c568831SAndroid Build Coastguard Worker# see https://github.com/google/oss-fuzz/issues/11798. 23*7c568831SAndroid Build Coastguard Workerif [ "$ARCHITECTURE" = "aarch64" ]; then 24*7c568831SAndroid Build Coastguard Worker export ASAN_OPTIONS=detect_leaks=0 25*7c568831SAndroid Build Coastguard Workerfi 26*7c568831SAndroid Build Coastguard Worker 27*7c568831SAndroid Build Coastguard Workerexport V=1 28*7c568831SAndroid Build Coastguard Worker 29*7c568831SAndroid Build Coastguard Worker./autogen.sh \ 30*7c568831SAndroid Build Coastguard Worker --disable-shared \ 31*7c568831SAndroid Build Coastguard Worker --without-debug \ 32*7c568831SAndroid Build Coastguard Worker --without-http \ 33*7c568831SAndroid Build Coastguard Worker --without-python \ 34*7c568831SAndroid Build Coastguard Worker $CONFIG 35*7c568831SAndroid Build Coastguard Workermake -j$(nproc) 36*7c568831SAndroid Build Coastguard Worker 37*7c568831SAndroid Build Coastguard Workercd fuzz 38*7c568831SAndroid Build Coastguard Workermake clean-corpus 39*7c568831SAndroid Build Coastguard Workermake fuzz.o 40*7c568831SAndroid Build Coastguard Worker 41*7c568831SAndroid Build Coastguard Workerfor fuzzer in \ 42*7c568831SAndroid Build Coastguard Worker api html lint reader regexp schema uri valid xinclude xml xpath 43*7c568831SAndroid Build Coastguard Workerdo 44*7c568831SAndroid Build Coastguard Worker make $fuzzer.o 45*7c568831SAndroid Build Coastguard Worker # Link with $CXX 46*7c568831SAndroid Build Coastguard Worker $CXX $CXXFLAGS \ 47*7c568831SAndroid Build Coastguard Worker $fuzzer.o fuzz.o \ 48*7c568831SAndroid Build Coastguard Worker -o $OUT/$fuzzer \ 49*7c568831SAndroid Build Coastguard Worker $LIB_FUZZING_ENGINE \ 50*7c568831SAndroid Build Coastguard Worker ../.libs/libxml2.a -Wl,-Bstatic -lz -llzma -Wl,-Bdynamic 51*7c568831SAndroid Build Coastguard Worker 52*7c568831SAndroid Build Coastguard Worker if [ $fuzzer != api ]; then 53*7c568831SAndroid Build Coastguard Worker [ -e seed/$fuzzer ] || make seed/$fuzzer.stamp 54*7c568831SAndroid Build Coastguard Worker zip -j $OUT/${fuzzer}_seed_corpus.zip seed/$fuzzer/* 55*7c568831SAndroid Build Coastguard Worker fi 56*7c568831SAndroid Build Coastguard Workerdone 57*7c568831SAndroid Build Coastguard Worker 58*7c568831SAndroid Build Coastguard Workercp *.dict *.options $OUT/ 59