From 54fda72783697f2258faa95d642224c47454b11b Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Fri, 21 Sep 2018 09:25:46 +0200 Subject: [PATCH 1/1] afh: Get rid of dummy entry at the end of afl[]. The number of audio formats is a compile-time constant. It used to be the array size of afl[] minus one due to the dummy entry. Without it, it becomes simply the array size. This patch introduces NUM_AUDIO_FORMATS as a shortcut for ARRAY_SIZE(afl) and adjusts next_audio_format() to avoid the access of memory past the end of the array. With these preparations in place, the dummy entry can be removed. --- afh_common.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/afh_common.c b/afh_common.c index cb773bd6..0b0d84be 100644 --- a/afh_common.c +++ b/afh_common.c @@ -80,11 +80,11 @@ static struct audio_format_handler afl[] = { .init = opus_afh_init, #endif }, - { - .name = NULL, - } }; +/** This includes audio formats not compiled in. */ +#define NUM_AUDIO_FORMATS (ARRAY_SIZE(afl)) + /** * Get the name of the given audio format. * @@ -95,7 +95,7 @@ static struct audio_format_handler afl[] = { */ const char *audio_format_name(int i) { - if (i < 0 || i >= ARRAY_SIZE(afl) - 1) + if (i < 0 || i >= NUM_AUDIO_FORMATS) return "???"; return afl[i].name; } @@ -103,16 +103,17 @@ const char *audio_format_name(int i) static inline int next_audio_format(int format) { for (;;) { - if (!afl[format].name) - return format; format++; + if (format >= NUM_AUDIO_FORMATS) + return format; if (afl[format].init) return format; } } /** Iterate over each supported audio format. */ -#define FOR_EACH_AUDIO_FORMAT(i) for (i = 0; afl[i].name; i = next_audio_format(i)) +#define FOR_EACH_AUDIO_FORMAT(i) \ + for (i = 0; i < NUM_AUDIO_FORMATS; i = next_audio_format(i)) /** * Call the init function of each supported audio format handler. -- 2.39.2