From 5c4bf63a94ed0c20aca5bafb94ecd05893a45ec1 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Tue, 24 Aug 2021 09:36:33 +0200 Subject: [PATCH] aplay: Handle 16bit sample negative overflow in peak calculations The handling of 16bit samples in the peak calculations has a bug when a sample with 0x8000 is passed. As abs() treats 32bit int, it returns 0x8000. And yet the code stores back into 16bit value again. To fix that overflow, use 32bit value (i.e. val instead of sval) for the further calculations. Signed-off-by: Takashi Iwai --- aplay/aplay.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aplay/aplay.c b/aplay/aplay.c index 91af244..c884346 100644 --- a/aplay/aplay.c +++ b/aplay/aplay.c @@ -1829,9 +1829,9 @@ static void compute_max_peak(u_char *data, size_t samples) else sval = be16toh(*valp); sval ^= mask; - sval = abs(sval); - if (max_peak[c] < sval) - max_peak[c] = sval; + val = abs(sval); + if (max_peak[c] < val) + max_peak[c] = val; valp++; if (vumeter == VUMETER_STEREO) c = !c;