Files
wehub-resource-sync 8a852e4b4e
cffconvert / validate (push) Has been skipped
License Check / license-check (push) Failing after 2s
chore: import upstream snapshot with attribution
2026-07-13 12:14:16 +08:00

118 lines
3.6 KiB
Python

"""Definitions for rules to fuzz TensorFlow."""
load("@rules_cc//cc:cc_test.bzl", "cc_test")
load("@rules_python//python:py_test.bzl", "py_test")
# TensorFlow fuzzing can be done in open source too, as it is in oss-fuzz.com
# tf_cc_fuzz_test is a cc_test modified to include fuzzing support and dependencies for go/fuzztest.
def tf_cc_fuzz_test(
name,
# Bug reporting component (unused in oss)
componentid = None,
# Additional cc_test control
data = [],
deps = [],
tags = [],
**kwargs):
"""Specify how to build a TensorFlow fuzz target.
Args:
name: Mandatory name of the fuzzer target.
componentid: The buganizer component ID for filing bugs
found by this fuzz test. By default, we use TensorFlow Security
component.
data: Additional data dependencies passed to the underlying cc_test rule.
deps: An optional list of dependencies for the code you're fuzzing.
tags: Additional tags passed to the underlying cc_test rule.
**kwargs: Collects all remaining arguments and passes them to the
underlying cc_test rule generated by the macro.
"""
componentid = None
# Fuzzers in open source must be run manually
tags = tags + ["manual"]
# Now, redirect to cc_test
cc_test(
name = name,
deps = deps + [
"@com_google_fuzztest//fuzztest",
"@com_google_fuzztest//fuzztest:fuzztest_gtest_main",
],
data = data,
tags = tags,
linkstatic = 1,
**kwargs
)
# tf_py_fuzz_target is a py_test modified to include fuzzing support.
def tf_py_fuzz_target(
name,
# Fuzzing specific arguments
fuzzing_dict = [],
corpus = [],
parsers = [],
# Reporting bugs arguments, not used in open source
componentid = None,
hotlists = [],
# Additional py_test control
python_version = None,
data = [],
deps = [],
tags = [],
# Remaining py_test arguments
**kwargs):
"""Specify how to build a TensorFlow Python fuzz target.
Args:
name: Mandatory name of the fuzzer target.
fuzzing_dict: An optional a set of dictionary files following
the AFL/libFuzzer dictionary syntax.
corpus: An optional set of files used as the initial test corpus
for the target. When doing "bazel test" in the default null-fuzzer
(unittest) mode, these files are automatically passed to the target
function.
parsers: An optional list of file extensions that the target supports.
Used by tools like autofuzz to reuse corpus sets across targets.
componentid: Used internally for reporting fuzz discovered bugs.
hotlists: Used internally for reporting fuzz discovered bugs.
python_version: Python version to run target with.
data: Additional data dependencies passed to the underlying py_test rule.
deps: An optional list of dependencies for the code you're fuzzing.
tags: Additional tags passed to the underlying py_test rule.
**kwargs: Collects all remaining arguments and passes them to the
underlying py_test rule generated by the macro.
"""
componentid = None
hotlists = None
python_version = python_version or "PY3"
# Fuzzers in open source must be run manually
tags = tags + ["manual"]
# Now, redirect to py_test
py_test(
name = name,
python_version = python_version,
deps = deps,
data = data,
tags = tags,
**kwargs
)