mirror of
https://github.com/boostorg/mysql.git
synced 2026-01-21 05:02:13 +00:00
62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
#!/usr/bin/python3
|
|
#
|
|
# Copyright (c) 2019-2025 Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
|
|
#
|
|
# Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
#
|
|
|
|
from pathlib import Path
|
|
import os
|
|
from shutil import unpack_archive, make_archive
|
|
from .common import run
|
|
from .seed_corpus import generate_seed_corpus
|
|
from .db_setup import db_setup
|
|
from .install_boost import install_boost
|
|
|
|
|
|
def fuzz_build(
|
|
source_dir: Path,
|
|
boost_branch: str,
|
|
server_host: str,
|
|
) -> None:
|
|
# Config
|
|
os.environ['UBSAN_OPTIONS'] = 'print_stacktrace=1'
|
|
|
|
# Get Boost. This leaves us inside boost root
|
|
install_boost(
|
|
source_dir=source_dir,
|
|
boost_branch=boost_branch,
|
|
)
|
|
|
|
# Setup corpus from previous runs. /tmp/corpus.tar.gz is restored by the CI
|
|
old_corpus = Path('/tmp/corpus.tar.gz')
|
|
if old_corpus.exists():
|
|
print('+ Restoring old corpus')
|
|
unpack_archive(old_corpus, extract_dir='/tmp/corpus')
|
|
else:
|
|
print('+ No old corpus found')
|
|
|
|
# Setup the seed corpus
|
|
print('+ Generating seed corpus')
|
|
generate_seed_corpus()
|
|
|
|
# Setup DB (required for injection testing)
|
|
db_setup(source_dir, server_host)
|
|
|
|
# Build and run the fuzzing targets
|
|
run([
|
|
'b2',
|
|
'--abbreviate-paths',
|
|
'toolset=clang',
|
|
'cxxstd=20',
|
|
'warnings-as-errors=on',
|
|
'-j4',
|
|
'libs/mysql/test/fuzzing',
|
|
])
|
|
|
|
# Archive the generated corpus, so the CI caches it
|
|
name = make_archive(str(old_corpus).rstrip('.tar.gz'), 'gztar', '/tmp/mincorpus')
|
|
print(' + Created min corpus archive {}'.format(name))
|
|
|