Blob Blame History Raw
From 27aa984fdcaf8d44d6260ea2da7a0f5cc78a8b13 Mon Sep 17 00:00:00 2001
From: XScreenSaver owners <xscreensaver-owner@fedoraproject.org>
Date: Fri, 1 Sep 2023 16:14:50 +0900
Subject: [PATCH] make_ximage: avoid integer overflow on left shift

gcc -fsanitize=undefined shows the following undefined behavior:
../../hacks/ximage-loader.c:176:29: runtime error: left shift of 255 by 24 places cannot be represented in type 'int'
This is because of integral promotion from guchar to int, not to unsigned int.

To avoid this error, cast to unsigned type.
---
 hacks/ximage-loader.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hacks/ximage-loader.c b/hacks/ximage-loader.c
index 9bd7970..a3f6eb0 100644
--- a/hacks/ximage-loader.c
+++ b/hacks/ximage-loader.c
@@ -173,7 +173,7 @@ make_ximage (Display *dpy, Visual *visual, const char *filename,
               i += 3;
               break;
             case 4:
-              rgba = ((i[3] << 24) |
+              rgba = ((((unsigned long)i[3]) << 24) |
                       (i[2] << 16) |
                       (i[1] <<  8) |
                       i[0]);
-- 
2.41.0