aboutsummaryrefslogtreecommitdiffstats
path: root/libswscale
diff options
context:
space:
mode:
authorSean McGovern <gseanmcg@gmail.com>2024-07-09 17:41:32 -0400
committerMichael Niedermayer <michael@niedermayer.cc>2024-07-10 18:10:10 +0200
commit34b4ca8696de64ca756e7aed7bdefa9ff6bb5fac (patch)
tree605708c7752e43b390e25ed1b0c890acfe0a903f /libswscale
parente9e8bea2e79bc3c481a6f81f75f6c871e3e0f367 (diff)
downloadffmpeg-34b4ca8696de64ca756e7aed7bdefa9ff6bb5fac.tar.gz
swscale: prevent undefined behaviour in the PUTRGBA macro
For even small values of 'asrc[x]', shifting them by 24 bits or more will cause arithmetic overflow and be caught by GCC's undefined behaviour sanitizer. Ensure the values do not overflow by up-casting the bracketed expressions involving 'asrc' to uint32_t. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libswscale')
-rw-r--r--libswscale/yuv2rgb.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c
index 977eb3a7dd..cfbc54abd0 100644
--- a/libswscale/yuv2rgb.c
+++ b/libswscale/yuv2rgb.c
@@ -100,9 +100,9 @@ const int *sws_getCoefficients(int colorspace)
#define PUTRGBA(dst, ysrc, asrc, i, abase) \
Y = ysrc[2 * i]; \
- dst[2 * i] = r[Y] + g[Y] + b[Y] + (asrc[2 * i] << abase); \
+ dst[2 * i] = r[Y] + g[Y] + b[Y] + ((uint32_t)(asrc[2 * i]) << abase); \
Y = ysrc[2 * i + 1]; \
- dst[2 * i + 1] = r[Y] + g[Y] + b[Y] + (asrc[2 * i + 1] << abase);
+ dst[2 * i + 1] = r[Y] + g[Y] + b[Y] + ((uint32_t)(asrc[2 * i + 1]) << abase);
#define PUTRGB48(dst, src, asrc, i, abase) \
Y = src[ 2 * i]; \