glfw/src
Stephen Gutekanst 6281424988 X11: Fix undefined behavior in glfwSetWindowIcon
The conversion of window icon image data involves unsigned char color
values being promoted to int and then shifted to the left by 24.  For
32-bit ints this is just far enough to trigger undefined behavior.

It worked by accident because of how current compilers translate this
piece of code.

This was caught by @slimsag while working on [Zig bindings for GLFW][1],
and diagnosed together with @Andoryuuta, as described [in an
article][2].  Zig has UBSan enabled by default, which caught this
undefined behavior.

[1]: https://github.com/hexops/mach-glfw
[2]: https://devlog.hexops.com/2021/perfecting-glfw-for-zig-and-finding-undefined-behavior#finding-lurking-undefined-behavior-in-6-year-old-glfw-code

Thanks to Maato, martinhath, dcousens, drfuchs and Validark for helping
to refine the solution.

This commit message was rewritten by @elmindreda to hopefully reflect
the conclusions of the pull request thread.

Related to hexops/mach#20
Closes #1986

(cherry picked from commit 9cd4d2fa20)
2021-12-08 19:58:12 +01:00
..
CMakeLists.txt Add custom target for updating gamepad mappings 2021-08-03 16:00:30 +02:00
cocoa_init.m Cocoa: Fix console apps getting a dock icon 2021-02-10 18:17:16 +01:00
cocoa_joystick.h Add gamepad mapping filtering by backend 2021-08-03 16:01:03 +02:00
cocoa_joystick.m Use the correct type in a for loop 2019-12-31 23:10:29 +01:00
cocoa_monitor.m Cocoa: Use MACH_PORT_NULL for default IOKit port 2021-11-24 23:01:46 +01:00
cocoa_platform.h Cocoa: Use MACH_PORT_NULL for default IOKit port 2021-11-24 23:01:46 +01:00
cocoa_time.c Add C dialect reminders to each source file 2019-05-27 16:33:22 +02:00
cocoa_window.m Cocoa: Fix unresponsive cursor after cursor warp 2021-10-13 23:11:00 +02:00
context.c Move single/double-buffer filtering to backends 2021-06-15 18:07:28 +02:00
egl_context.c Fix context API checks in native access functions 2021-10-28 12:29:57 +02:00
egl_context.h Remove blank line before the end of some structs 2021-10-28 12:14:58 +02:00
glfw3.pc.in Move to the modern CMake project version option 2019-05-19 18:30:58 +02:00
glfw3Config.cmake.in Include imported targets into module config file 2016-02-02 06:00:18 +01:00
glfw_config.h.in Cocoa: Select Vulkan surface extension at runtime 2020-01-17 15:40:48 +01:00
glx_context.c Fix context API checks in native access functions 2021-10-28 12:29:57 +02:00
glx_context.h Remove blank line before the end of some structs 2021-10-28 12:14:58 +02:00
init.c Update comments for global mutable data 2021-11-30 19:04:38 +01:00
input.c Fix mappings for gamepads present at init 2021-11-24 23:09:24 +01:00
internal.h Simplify parsing of default gamepad mappings 2021-08-27 17:13:12 +02:00
linux_joystick.c Convert some declarations to C99 style 2019-07-16 14:38:26 +02:00
linux_joystick.h Add gamepad mapping filtering by backend 2021-08-03 16:01:03 +02:00
mappings.h Simplify parsing of default gamepad mappings 2021-08-27 17:13:12 +02:00
mappings.h.in Simplify parsing of default gamepad mappings 2021-08-27 17:13:12 +02:00
monitor.c Make monitor and joystick names static strings 2021-06-09 18:37:31 +02:00
nsgl_context.h Remove blank line before the end of some structs 2021-10-28 12:14:58 +02:00
nsgl_context.m Fix context API checks in native access functions 2021-10-28 12:29:57 +02:00
null_init.c Add C dialect reminders to each source file 2019-05-27 16:33:22 +02:00
null_joystick.c Add C dialect reminders to each source file 2019-05-27 16:33:22 +02:00
null_joystick.h Fix -Wextra-semi warnings 2019-11-05 17:59:15 +01:00
null_monitor.c Add C dialect reminders to each source file 2019-05-27 16:33:22 +02:00
null_platform.h Fix -Wextra-semi warnings 2019-11-05 17:59:15 +01:00
null_window.c Add C dialect reminders to each source file 2019-05-27 16:33:22 +02:00
osmesa_context.c Fix context API checks in native access functions 2021-10-28 12:29:57 +02:00
osmesa_context.h Remove blank line before the end of some structs 2021-10-28 12:14:58 +02:00
posix_thread.c Add C dialect reminders to each source file 2019-05-27 16:33:22 +02:00
posix_thread.h Remove blank line before the end of some structs 2021-10-28 12:14:58 +02:00
posix_time.c Add C dialect reminders to each source file 2019-05-27 16:33:22 +02:00
posix_time.h Remove blank line before the end of some structs 2021-10-28 12:14:58 +02:00
vulkan.c Cocoa: Add fully dynamic loading of Vulkan loader 2020-01-17 15:42:39 +01:00
wgl_context.c Fix context API checks in native access functions 2021-10-28 12:29:57 +02:00
wgl_context.h Remove blank line before the end of some structs 2021-10-28 12:14:58 +02:00
win32_init.c Win32: Remove timeGetTime fallback for timer 2021-10-28 12:24:38 +02:00
win32_joystick.c Win32: Fix VS /W4 compile warnings 2020-06-02 19:01:15 +02:00
win32_joystick.h Add gamepad mapping filtering by backend 2021-08-03 16:01:03 +02:00
win32_monitor.c Win32: Update all monitor handles on config change 2020-09-30 16:10:17 +02:00
win32_platform.h Win32: Remove timeGetTime fallback for timer 2021-10-28 12:24:38 +02:00
win32_thread.c Add C dialect reminders to each source file 2019-05-27 16:33:22 +02:00
win32_time.c Win32: Remove timeGetTime fallback for timer 2021-10-28 12:24:38 +02:00
win32_window.c Improve error description for invalid scancodes 2021-08-03 15:59:59 +02:00
window.c Add tracking of single-/double-buffering 2021-06-15 18:04:05 +02:00
wl_init.c Wayland: Fix cursor offset when shape changes 2021-10-13 23:06:40 +02:00
wl_monitor.c Make monitor and joystick names static strings 2021-06-09 18:37:31 +02:00
wl_platform.h Remove blank line before the end of some structs 2021-10-28 12:14:58 +02:00
wl_window.c Wayland: Fix cursor offset when shape changes 2021-10-13 23:06:40 +02:00
x11_init.c Use the correct type in a for loop 2020-06-02 19:01:09 +02:00
x11_monitor.c Fix typos 2020-06-30 17:09:55 +02:00
x11_platform.h Remove blank line before the end of some structs 2021-10-28 12:14:58 +02:00
x11_window.c X11: Fix undefined behavior in glfwSetWindowIcon 2021-12-08 19:58:12 +01:00
xkb_unicode.c Add C dialect reminders to each source file 2019-05-27 16:33:22 +02:00
xkb_unicode.h Remove internal header inclusion guards 2017-05-25 19:35:13 +02:00