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.
38 lines
1.2 KiB
38 lines
1.2 KiB
12 months ago
|
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
|
||
|
|