]> git.alsa-project.org Git - alsa-utils.git/commitdiff
aplay: Handle 16bit sample negative overflow in peak calculations
authorTakashi Iwai <tiwai@suse.de>
Tue, 24 Aug 2021 07:36:33 +0000 (09:36 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 24 Aug 2021 07:53:53 +0000 (09:53 +0200)
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 <tiwai@suse.de>
aplay/aplay.c

index 91af244edb60a68711fda5295cffa09901947e19..c884346c9f25e790707d3235430d5fd6cb3a5386 100644 (file)
@@ -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;