You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.2 KiB
37 lines
1.2 KiB
From b6aacc5eb73ef0d41bdff9cd62672d4dc7a62e0d Mon Sep 17 00:00:00 2001 |
|
From: XScreenSaver owners <xscreensaver-owner@fedoraproject.org> |
|
Date: Fri, 1 Sep 2023 17:32:57 +0900 |
|
Subject: [PATCH 2/2] convert_ximage_to_rgba32: avoid integer overflow on left |
|
shift |
|
|
|
gcc -fsanitize=undefined shows the following undefined behavior: |
|
|
|
../../../hacks/glx/grab-ximage.c:213:21: runtime error: left shift of 255 by 24 places cannot be represented in type 'int' |
|
|
|
This is because of integral promotion from unsigned char to int, not to unsigned int. |
|
|
|
To avoid this error, cast to unsigned long type. |
|
--- |
|
hacks/glx/grab-ximage.c | 4 ++-- |
|
1 file changed, 2 insertions(+), 2 deletions(-) |
|
|
|
diff --git a/hacks/glx/grab-ximage.c b/hacks/glx/grab-ximage.c |
|
index defefda..9d3a2d6 100644 |
|
--- a/hacks/glx/grab-ximage.c |
|
+++ b/hacks/glx/grab-ximage.c |
|
@@ -207,10 +207,10 @@ convert_ximage_to_rgba32 (Screen *screen, XImage *image) |
|
sb = spread_map[2][sb]; |
|
} |
|
|
|
- cp = ((sr << crpos) | |
|
+ cp = ((((unsigned long)sr) << crpos) | |
|
(sg << cgpos) | |
|
(sb << cbpos) | |
|
- (0xFF << capos)); |
|
+ (0xFFUL << capos)); |
|
|
|
XPutPixel (to, x, y, cp); |
|
} |
|
-- |
|
2.41.0 |
|
|
|
|