make py functions as optional as they are in the doc
MODIFY
include/afl-fuzz.h
include/afl-fuzz.h
@@ -288,17 +288,19 @@ enum {
enum {
/* 00 */ PY_FUNC_INIT,
- /* 01 */ PY_FUNC_FUZZ,
- /* 02 */ PY_FUNC_POST_PROCESS,
- /* 03 */ PY_FUNC_INIT_TRIM,
- /* 04 */ PY_FUNC_POST_TRIM,
- /* 05 */ PY_FUNC_TRIM,
- /* 06 */ PY_FUNC_HAVOC_MUTATION,
- /* 07 */ PY_FUNC_HAVOC_MUTATION_PROBABILITY,
- /* 08 */ PY_FUNC_QUEUE_GET,
- /* 09 */ PY_FUNC_QUEUE_NEW_ENTRY,
- /* 10 */ PY_FUNC_DEINIT,
- /* 11 */ PY_FUNC_FUZZ_COUNT,
+ /* 01 */ PY_FUNC_DEINIT,
+ /* FROM HERE ON BELOW ALL ARE OPTIONAL */
+ /* 02 */ PY_OPTIONAL = 2,
+ /* 02 */ PY_FUNC_FUZZ = 2,
+ /* 03 */ PY_FUNC_FUZZ_COUNT,
+ /* 04 */ PY_FUNC_POST_PROCESS,
+ /* 05 */ PY_FUNC_INIT_TRIM,
+ /* 06 */ PY_FUNC_POST_TRIM,
+ /* 07 */ PY_FUNC_TRIM,
+ /* 08 */ PY_FUNC_HAVOC_MUTATION,
+ /* 09 */ PY_FUNC_HAVOC_MUTATION_PROBABILITY,
+ /* 10 */ PY_FUNC_QUEUE_GET,
+ /* 11 */ PY_FUNC_QUEUE_NEW_ENTRY,
PY_FUNC_COUNT
};

MODIFY
src/afl-fuzz-python.c
src/afl-fuzz-python.c
@@ -144,7 +144,8 @@ static py_mutator_t *init_py_module(afl_state_t *afl, u8 *module_name) {
py_functions[PY_FUNC_FUZZ] = PyObject_GetAttrString(py_module, "fuzz");
if (!py_functions[PY_FUNC_FUZZ])
py_functions[PY_FUNC_FUZZ] = PyObject_GetAttrString(py_module, "mutate");
- py_functions[PY_FUNC_FUZZ_COUNT] = PyObject_GetAttrString(py_module, "fuzz_count");
+ py_functions[PY_FUNC_FUZZ_COUNT] =
+ PyObject_GetAttrString(py_module, "fuzz_count");
if (!py_functions[PY_FUNC_FUZZ])
WARNF("fuzz function not found in python module");
py_functions[PY_FUNC_POST_PROCESS] =
@@ -170,27 +171,20 @@ static py_mutator_t *init_py_module(afl_state_t *afl, u8 *module_name) {
if (!py_functions[py_idx] || !PyCallable_Check(py_functions[py_idx])) {
- if (py_idx == PY_FUNC_POST_PROCESS) {
-
- // Implenting the post_process API is optional for now
- if (PyErr_Occurred()) { PyErr_Print(); }
-
- } else if (py_idx >= PY_FUNC_INIT_TRIM && py_idx <= PY_FUNC_TRIM) {
+ if (py_idx >= PY_FUNC_INIT_TRIM && py_idx <= PY_FUNC_TRIM) {
// Implementing the trim API is optional for now
if (PyErr_Occurred()) { PyErr_Print(); }
py_notrim = 1;
- } else if ((py_idx >= PY_FUNC_HAVOC_MUTATION) &&
+ } else if (py_idx >= PY_OPTIONAL) {
- (py_idx <= PY_FUNC_QUEUE_NEW_ENTRY)) {
+ // Only _init and _deinit are not optional currently
- // Implenting the havoc and queue API is optional for now
if (PyErr_Occurred()) { PyErr_Print(); }
- } else if (py_idx != PY_FUNC_FUZZ_COUNT) {
+ } else {
- if (PyErr_Occurred()) { PyErr_Print(); }
fprintf(stderr,
"Cannot find/call function with index %d in external "
"Python module.\n",

make py functions as optional as they are in the doc