blob: 5bc45c97474738175ba8a9edb972cb5f7bbbbba9 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.fuzzer;
using zx;
const MAX_PARAMETERS uint16 = 128;
const MAX_PARAMETER_LEN uint16 = 256;
/// Maps test inputs to specific behaviors in the target code, e.g. by invoking APIs, making FIDL
/// calls. etc. The adapter includes the target-specific code often referred to as the "fuzz target
/// function".
///
/// See also:
/// https://llvm.org/docs/LibFuzzer.html#fuzz-target
@discoverable
protocol TargetAdapter {
/// Retrieves the target-specific fuzzer parameters, e.g. the package-relative location of seed
/// corpora. These parameters are specific to individual fuzzers, and are used by both the
/// fuzzing engine and the "test-engine" used to create fuzzer unit tests. For these reasons,
/// it is most convenient for fuzzer authors to specify them as part of the (fuzzer-specific)
/// target adapter's component manifest file, and have the engine and test-engine retrieve them
/// via this method.
GetParameters() -> (struct {
parameters vector<string:MAX_PARAMETER_LEN>:MAX_PARAMETERS;
});
/// Provides the eventpair used by driver and adapter to signal each other, and the shared VMO
/// used to provide test inputs to the adapter. The VMO must have the ZX_PROP_VMO_CONTENT_SIZE
/// property set.
Connect(resource struct {
eventpair zx.handle:EVENTPAIR;
test_input zx.handle:VMO;
}) -> ();
};