xref: /aosp_15_r20/external/libxml2/fuzz/oss-fuzz-build.sh (revision 7c5688314b92172186c154356a6374bf7684c3ca)
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