aboutsummaryrefslogtreecommitdiffhomepage
path: root/projects/expat/build.sh
blob: b185038f1d83c1adf3cb976e94675f3f45f179bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash -eu
# Copyright 2016 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.
#
################################################################################

cd expat

./buildconf.sh
./configure
make clean
make -j$(nproc) all

ENCODING_TYPES="UTF_16 \
  UTF_8 \
  ISO_8859_1 \
  US_ASCII \
  UTF_16BE \
  UTF_16LE"

for encoding in $ENCODING_TYPES; do
  fuzz_target_name=parse_${encoding}_fuzzer

  $CXX $CXXFLAGS -std=c++11 -Ilib/ -DENCODING_${encoding} \
      $SRC/parse_fuzzer.cc -o $OUT/${fuzz_target_name} \
      $LIB_FUZZING_ENGINE lib/.libs/libexpat.a

  # Use dictionaries in proper encoding for 16-bit encoding types.
  if [[ $encoding == *"UTF_16"* ]]; then
    cp $SRC/xml_${encoding}.dict  $OUT/${fuzz_target_name}.dict
  else
    cp $SRC/xml.dict  $OUT/${fuzz_target_name}.dict
  fi

  # Generate .option files for each fuzzer.
  echo -en "[libfuzzer]\ndict = ${fuzz_target_name}.dict\nmax_len = 1024\n" \
      > $OUT/${fuzz_target_name}.options
done