File: Jamfile

package info (click to toggle)
boost1.90 1.90.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 593,156 kB
  • sloc: cpp: 4,190,642; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,776; makefile: 1,161; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (82 lines) | stat: -rw-r--r-- 2,272 bytes parent folder | download | duplicates (4)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#
# 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)
#

import common ;
import regex ;

local all_fuzzers = [ regex.replace-list
    [ glob "fuzz_*.cpp" ] : ".cpp" : ""
] ;

# Fuzzers that should use a longer time period
local long_fuzzers =
    fuzz_row
    fuzz_text_field
    fuzz_utf8mb4
    fuzz_escape_string
    fuzz_format_strings
    fuzz_format_args
    fuzz_format_sql_injection
;


for local fuzzer in $(all_fuzzers)
{
    local fuzz_time = 10 ;
    if $(fuzzer) in $(long_fuzzers)
    {
        fuzz_time = 30 ;
    }

    # Create the output corpus directories
    make /tmp/corpus/$(fuzzer) : : common.MkDir ;
    make /tmp/mincorpus/$(fuzzer) : : common.MkDir ;

    # Build the fuzzer. Fail the build if openssl is not found
    exe $(fuzzer)
        : 
            /boost/mysql/test//boost_mysql
            /boost/mysql/test//fail_if_no_openssl
            $(fuzzer).cpp
        : requirements
            <include>../common/include
            <debug-symbols>on
            <optimization>speed
            <address-sanitizer>on
            <undefined-sanitizer>norecover
            <cxxflags>-fsanitize=fuzzer
            <linkflags>-fsanitize=fuzzer
    ;

    # Make sure that any old crashes are run without problems
    local old_crashes = [ glob-tree-ex old_crashes/$(fuzzer) : * ] ;
    if $(old_crashes)
    {
        run $(fuzzer)
            : target-name $(fuzzer)-old-crashes
            : input-files [ SORT $(old_crashes) ]
        ;
    }

    # Run the fuzzer for a short while
    run $(fuzzer)
        : <testing.arg>"/tmp/corpus/$(fuzzer) /tmp/seedcorpus/$(fuzzer) -max_total_time=$(fuzz_time)"
        : target-name $(fuzzer)-fuzzing
        : requirements
            <dependency>/tmp/corpus/$(fuzzer)
    ;

    # Minimize the corpus
    run $(fuzzer)
        : <testing.arg>"/tmp/mincorpus/$(fuzzer) /tmp/corpus/$(fuzzer) -merge=1"
        : target-name $(fuzzer)-minimize-corpus
        : requirements
            <dependency>$(fuzzer)-fuzzing
            <dependency>/tmp/corpus/$(fuzzer)
            <dependency>/tmp/mincorpus/$(fuzzer)
    ;
}