annotate contrib/fuzz/standalone_fuzz_target_runner.cc @ 50329:3dbc7b1ecaba stable

typing: correct the signature of error.CommandError There's a place in `mercurial.dispatch._parse()` that passes None if a parse error happens before the command can be parsed out, and casting the error to bytes works fine because the command and message fields are apparently ignored. Likewise, TortoiseHg similarly passes None for the same reason.
author Matt Harbison <matt_harbison@yahoo.com>
date Fri, 24 Mar 2023 02:22:12 -0400
parents e137338e926b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
43813
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
1 // Copyright 2017 Google Inc. All Rights Reserved.
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
2 // Licensed under the Apache License, Version 2.0 (the "License");
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
3
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
4 // Example of a standalone runner for "fuzz targets".
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
5 // It reads all files passed as parameters and feeds their contents
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
6 // one by one into the fuzz target (LLVMFuzzerTestOneInput).
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
7 // This runner does not do any fuzzing, but allows us to run the fuzz target
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
8 // on the test corpus (e.g. "do_stuff_test_data") or on a single file,
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
9 // e.g. the one that comes from a bug report.
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
10
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
11 #include <cassert>
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
12 #include <fstream>
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
13 #include <iostream>
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
14 #include <vector>
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
15
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
16 // Forward declare the "fuzz target" interface.
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
17 // We deliberately keep this inteface simple and header-free.
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
18 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
19
43814
e137338e926b fuzz: make standalone_fuzz_target_runner call LLVMFuzzerInitialize
Augie Fackler <augie@google.com>
parents: 43813
diff changeset
20 extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv);
e137338e926b fuzz: make standalone_fuzz_target_runner call LLVMFuzzerInitialize
Augie Fackler <augie@google.com>
parents: 43813
diff changeset
21
43813
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
22 int main(int argc, char **argv)
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
23 {
43814
e137338e926b fuzz: make standalone_fuzz_target_runner call LLVMFuzzerInitialize
Augie Fackler <augie@google.com>
parents: 43813
diff changeset
24 LLVMFuzzerInitialize(&argc, &argv);
e137338e926b fuzz: make standalone_fuzz_target_runner call LLVMFuzzerInitialize
Augie Fackler <augie@google.com>
parents: 43813
diff changeset
25
43813
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
26 for (int i = 1; i < argc; i++) {
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
27 std::ifstream in(argv[i]);
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
28 in.seekg(0, in.end);
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
29 size_t length = in.tellg();
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
30 in.seekg(0, in.beg);
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
31 std::cout << "Reading " << length << " bytes from " << argv[i]
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
32 << std::endl;
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
33 // Allocate exactly length bytes so that we reliably catch
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
34 // buffer overflows.
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
35 std::vector<char> bytes(length);
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
36 in.read(bytes.data(), bytes.size());
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
37 assert(in);
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
38 LLVMFuzzerTestOneInput(
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
39 reinterpret_cast<const uint8_t *>(bytes.data()),
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
40 bytes.size());
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
41 std::cout << "Execution successful" << std::endl;
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
42 }
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
43 return 0;
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
44 }
5a9e2ae9899b fuzz: use a more standard approach to allow local builds of fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
45 // no-check-code since this is from a third party