From 88f34229c655f88e0a11f5ebb86a200e226ca36f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= Date: Fri, 11 Jul 2025 21:40:11 +0200 Subject: [PATCH] fuzzers/common: stop after 15 events if there is not playback reset We wait for timeout and stop fuzzing, but if there are events spammed this timeout never fire, so instead limit the number of events after playback reset. --- fuzzers/common.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/fuzzers/common.h b/fuzzers/common.h index 33a8424862..f3160b957c 100644 --- a/fuzzers/common.h +++ b/fuzzers/common.h @@ -52,19 +52,29 @@ static inline bool str_startswith(const char *str, size_t str_len, #define PLAYBACK_TIME_LIMIT 5 #endif +#ifndef EVENTS_LIMIT +#define EVENTS_LIMIT 10 +#endif + static inline void player_loop(mpv_handle *ctx) { bool playing = false; bool loaded = false; int timeout = -1; + int events_limit_after_restart = EVENTS_LIMIT; while (1) { mpv_event *event = mpv_wait_event(ctx, timeout); + // If some events are spamming, like audio-reconfig preventing our + // timeout to trigger stop after N events. + if (timeout == PLAYBACK_TIME_LIMIT && events_limit_after_restart-- < 0) + break; if (timeout == PLAYBACK_TIME_LIMIT && event->event_id == MPV_EVENT_NONE) break; if (event->event_id == MPV_EVENT_START_FILE) loaded = playing = true; if (event->event_id == MPV_EVENT_END_FILE) { playing = false; + events_limit_after_restart = EVENTS_LIMIT; timeout = -1; } if (playing && event->event_id == MPV_EVENT_PLAYBACK_RESTART)