From da0605dc294f122d166d42e5c8b7611be2d414f7 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 c4d61a66cb..0d33572c2e 100644 --- a/libavcodec/alsdec.c +++ b/libavcodec/alsdec.c @@ -1552,7 +1552,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; }