From 659be87a5b49d70cbfbcd6803ea79563a8930c6e Mon Sep 17 00:00:00 2001 From: Kp Date: Mon, 28 Jun 2021 03:37:51 +0000 Subject: [PATCH] Saturate return value of fix2byte --- similar/arch/sdl/digi_mixer.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/similar/arch/sdl/digi_mixer.cpp b/similar/arch/sdl/digi_mixer.cpp index 280d7301e..f7649264d 100644 --- a/similar/arch/sdl/digi_mixer.cpp +++ b/similar/arch/sdl/digi_mixer.cpp @@ -73,9 +73,15 @@ struct RAIIMix_Chunk : public Mix_Chunk RAIIMix_Chunk &operator=(const RAIIMix_Chunk &) = delete; }; -static int fix2byte(const fix f) +static uint8_t fix2byte(const fix f) { - return (f / 256) % 256; + if (f >= UINT8_MAX << 8) + /* Values greater than this would produce incorrect results if + * shifted and truncated. As a special case, coerce such values + * to the largest representable return value. + */ + return UINT8_MAX; + return f >> 8; } uint8_t digi_initialised;