Skip to content

Commit b3d34cd

Browse files
authored
Merge pull request #3579 from DavidKorczynski/patch-1
Fix broken fuzzing harness
2 parents 871b843 + 9a577ac commit b3d34cd

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

test/fuzz/dcd_fuzz.cc

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,22 @@ void dcd_int_handler(uint8_t rhport) {
6161

6262
// Choose if we want to generate a signal based on the fuzzed data.
6363
if (_fuzz_data_provider->ConsumeBool()) {
64-
dcd_event_bus_signal(
65-
rhport,
66-
// Choose a random event based on the fuzz data.
67-
(dcd_eventid_t)_fuzz_data_provider->ConsumeIntegralInRange<uint8_t>(
68-
DCD_EVENT_INVALID + 1, DCD_EVENT_COUNT - 1),
69-
// Identify trigger as either an interrupt or a syncrhonous call
70-
// depending on fuzz data.
71-
_fuzz_data_provider->ConsumeBool());
64+
// Only generate bus signal events that don't carry additional union data.
65+
// DCD_EVENT_XFER_COMPLETE, DCD_EVENT_SOF, and DCD_EVENT_BUS_RESET need
66+
// properly initialized union fields; USBD_EVENT_FUNC_CALL is internal only.
67+
// Valid bus-signal-only events: UNPLUGGED(2), SUSPEND(4), RESUME(5).
68+
static const dcd_eventid_t bus_signal_events[] = {
69+
DCD_EVENT_UNPLUGGED, DCD_EVENT_SUSPEND, DCD_EVENT_RESUME};
70+
uint8_t idx = _fuzz_data_provider->ConsumeIntegralInRange<uint8_t>(0, 2);
71+
dcd_event_bus_signal(rhport, bus_signal_events[idx],
72+
_fuzz_data_provider->ConsumeBool());
73+
}
74+
75+
// Optionally generate a BUS_RESET event with a valid speed value.
76+
if (_fuzz_data_provider->ConsumeBool()) {
77+
tusb_speed_t speed = (tusb_speed_t)_fuzz_data_provider->ConsumeIntegralInRange<uint8_t>(
78+
TUSB_SPEED_FULL, TUSB_SPEED_HIGH);
79+
dcd_event_bus_reset(rhport, speed, _fuzz_data_provider->ConsumeBool());
7280
}
7381

7482
if (_fuzz_data_provider->ConsumeBool()) {

0 commit comments

Comments
 (0)