A coverage-guided fuzzer for Python and Python extensions based on libFuzzer
91
{
"context": "This criteria evaluates how well the engineer uses Atheris's string method hooking capability to enable effective fuzzing of string comparison operations. The focus is on proper usage of the enabled_hooks interface and FuzzedDataProvider to discover magic string prefixes and suffixes.",
"type": "weighted_checklist",
"checklist": [
{
"name": "String hook enabled",
"description": "Uses atheris.enabled_hooks.add() to enable the \"String\" hook for tracking string comparison operations like startswith() and endswith()",
"max_score": 25
},
{
"name": "FuzzedDataProvider usage",
"description": "Uses atheris.FuzzedDataProvider to convert raw fuzzing bytes into structured string data for testing",
"max_score": 15
},
{
"name": "Setup() called correctly",
"description": "Calls atheris.Setup() with sys.argv and the TestOneInput callback to initialize the fuzzer",
"max_score": 15
},
{
"name": "Fuzz() called",
"description": "Calls atheris.Fuzz() to start the fuzzing loop after setup is complete",
"max_score": 10
},
{
"name": "String comparison operations",
"description": "The validate_input function uses str.startswith() and str.endswith() methods which are instrumented by the String hook",
"max_score": 20
},
{
"name": "Proper data flow",
"description": "TestOneInput properly creates FuzzedDataProvider from input bytes, generates strings, and passes them to validate_input",
"max_score": 15
}
]
}Install with Tessl CLI
npx tessl i tessl/pypi-atherisevals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10