From bf37aec672efaf7824d9c96bcff7a45eb47ef280 Mon Sep 17 00:00:00 2001 From: Cheyenne Wills Date: Fri, 22 Jan 2021 12:48:21 -0700 Subject: [PATCH 1/1] tests: fix potential divide by zero condition Running clang's static analysis revealed a possible divide by zero condition. There is a random chance of the divide by zero. - it has to be in the first pass of the main loop testing events (counter = 0) - 90% chance path : if (counter < (NUMEVENTS -1) && random() % 10 == 0) -- needs to be false - 25% chance path: if (random() % 4 == 0) -- needs to be true if the above conditions are met, the statement int victim = random() % counter is a divide by zero. Add a check to ensure the counter is greater than zero. Add a comment to document that only events prior to the current event are randomly selected. Change-Id: I4b4e73fa324842bb504bcc952079af15aea8a6a3 Reviewed-on: https://gerrit.openafs.org/14501 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Reviewed-by: Benjamin Kaduk --- tests/rx/event-t.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/rx/event-t.c b/tests/rx/event-t.c index 008cadb..7c4fdc5 100644 --- a/tests/rx/event-t.c +++ b/tests/rx/event-t.c @@ -166,9 +166,11 @@ main(void) = rxevent_Post(&eventTime, &now, eventSub, &events[counter], NULL, 0); } - - /* A 25% chance that we will cancel a random event */ - if (random() % 4 == 0) { + /* + * A 25% chance that we will cancel some event. + * Randomly pick any event that was scheduled before the current event. + */ + if (counter > 0 && (random() % 4 == 0)) { int victim = random() % counter; if (rxevent_Cancel(&events[victim].event)) -- 1.9.4