From daf2cb8bfd36a7de018e7cd41865ad38e2b2ea27 Mon Sep 17 00:00:00 2001 From: Priyanshu Thapliyal Date: Tue, 24 Mar 2026 13:57:27 +0530 Subject: [PATCH] avcodec/alsdec: fix abs(INT_MIN) UB in read_diff_float_data() Replace abs() with FFABSU() to avoid undefined behavior when raw_samples[c][i] == INT_MIN. Per libavutil/common.h, FFABS() has the same INT_MIN UB as abs(); FFABSU() is the correct helper as it casts to unsigned before negation. Reported-by: Guanni Qu Signed-off-by: Priyanshu Thapliyal (cherry picked from commit 1853c80e20c517c094af0d12605c435b9f5f0972) Signed-off-by: Michael Niedermayer --- libavcodec/alsdec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c index 917e7b6264..7fbde60681 100644 --- a/libavcodec/alsdec.c +++ b/libavcodec/alsdec.c @@ -1541,7 +1541,7 @@ static int read_diff_float_data(ALSDecContext *ctx, unsigned int ra_frame) { if (ctx->raw_samples[c][i] != 0) { //The following logic is taken from Tabel 14.45 and 14.46 from the ISO spec if (av_cmp_sf_ieee754(acf[c], FLOAT_1)) { - nbits[i] = 23 - av_log2(abs(ctx->raw_samples[c][i])); + nbits[i] = 23 - av_log2(FFABSU(ctx->raw_samples[c][i])); } else { nbits[i] = 23; }