@samitouri / QOSamiQemu / commits / 133c52f63e

audio: Avoid unsigned sample wraparound

When !defined(SIGNED), nv - HALF will wrap around if nv < HALF because nv and HALF are unsigned. Fix it by casting nv to mixeng_real, which is signed. Signed-off-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20260423-audio-v1-1-e1d6b65c76f9@rsg.ci.i.u-tokyo.ac.jp>

Akihiko Odaki committed Apr 23, 2026 at 22:55 UTC 133c52f63eefb8c35d9a2e0e28d1db99089a46e5
1 file changed +2 -2
audio/mixeng_template.h
+2 -2
@@ -43,13 +43,13 @@ static inline mixeng_real glue (conv_, ET) (IN_T v)
43 #ifdef SIGNED
44 return nv * (2.f / ((mixeng_real)IN_MAX - IN_MIN));
45 #else
46 - return (nv - HALF) * (2.f / (mixeng_real)IN_MAX);
46 + return ((mixeng_real)nv - HALF) * (2.f / (mixeng_real)IN_MAX);
47 #endif
48 #else /* !RECIPROCAL */
49 #ifdef SIGNED
50 return nv / (((mixeng_real)IN_MAX - IN_MIN) / 2.f);
51 #else
52 - return (nv - HALF) / ((mixeng_real)IN_MAX / 2.f);
52 + return ((mixeng_real)nv - HALF) / ((mixeng_real)IN_MAX / 2.f);
53 #endif
54 #endif
55 }