wayland/tests
David Benjamin 8a7ecd774c util: fix undefined behavior in wl_array_for_each
If a wl_array has size zero, wl_array_for_each computes NULL + 0 to get
to the end pointer. This should be fine, and indeed it would be fine in
C++. But the C specification has a mistake here and it is actually
undefined behavior. See
https://davidben.net/2024/01/15/empty-slices.html

Clang's -fsanitize=undefined flags this. I ran into this in Chromium's
build with wayland-scanner on one of our XML files.

../../third_party/wayland/src/src/scanner.c:1853:2: runtime error: applying zero offset to null pointer
    #0 0x55c979b8e02c in emit_code third_party/wayland/src/src/scanner.c:1853:2
    #1 0x55c979b89323 in main third_party/wayland/src/src/scanner.c
    #2 0x7f8dfdb8c6c9 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #3 0x7f8dfdb8c784 in __libc_start_main csu/../csu/libc-start.c:360:3
    #4 0x55c979b70f39 in _start (...)

An empty XML file is sufficient to hit this case, so I've added it as a
test. To reproduce, undo the fix and include only the test, then build
with:

  CC=clang CFLAGS="-fno-sanitize-recover=undefined" meson build/ -Db_sanitize=undefined -Db_lundef=false
  ninja -C build test

Signed-off-by: David Benjamin <davidben@google.com>
2024-03-24 20:00:01 -04:00
..
data util: fix undefined behavior in wl_array_for_each 2024-03-24 20:00:01 -04:00
array-test.c Avoid pointer arithmetic on void * 2019-06-05 10:01:07 +00:00
client-test.c Mitigate UAF crashes due to wl_client_destroy reentrancy 2024-02-23 00:40:32 +00:00
compositor-introspection-test.c Check that XDG base directories paths are absolute 2022-06-09 18:34:17 +00:00
connection-test.c Do not allow nullable new_id 2022-07-14 08:38:49 -07:00
cpp-compile-test.cpp tests: C++ compilation test 2015-01-27 11:17:42 +00:00
display-test.c tests: add a test for dynamic filtered globals 2022-06-15 07:53:19 +00:00
event-loop-test.c build: don't rely on implicit GNU extensions 2022-01-10 15:08:46 +01:00
exec-fd-leak-checker.c tests: Require base 10 for the string specifying the number of open fd's 2016-07-11 13:32:15 -07:00
fixed-test.c build: don't rely on implicit GNU extensions 2022-01-10 15:08:46 +01:00
headers-protocol-core-test.c tests: Check for client/server-core.h inclusion 2016-05-19 14:31:18 -07:00
headers-protocol-test.c tests: Update boilerplate from MIT X11 license to MIT Expat license 2015-06-12 15:31:24 -07:00
headers-test.c tests: Update boilerplate from MIT X11 license to MIT Expat license 2015-06-12 15:31:24 -07:00
interface-test.c tests: Test wl_interface_equal 2016-11-18 16:21:19 +02:00
list-test.c tests: Add test for wl_list_length 2016-09-05 15:10:43 +03:00
map-test.c util: Avoid undefined behaviour in for_each_helper 2021-07-21 11:42:42 +00:00
meson.build build: add a gen-scanner-test target 2024-01-15 14:29:10 +01:00
message-test.c Do not allow nullable new_id 2022-07-14 08:38:49 -07:00
newsignal-test.c tests: fix typos 2020-12-17 16:03:14 -05:00
os-wrappers-test.c tests: manually wrap libc functions 2023-06-27 13:31:50 +02:00
protocol-logger-test.c Check that XDG base directories paths are absolute 2022-06-09 18:34:17 +00:00
proxy-test.c client: Add method to get display for a given proxy 2023-08-07 13:38:01 +00:00
queue-test.c client: Allow setting names for queues 2024-01-22 12:34:14 +00:00
resources-test.c Mitigate UAF crashes due to iteration over freed wl_resources 2024-02-07 09:45:41 +00:00
sanity-test.c tests: Capture the test client log 2023-02-28 11:22:04 +00:00
scanner-test-gen.sh util: fix undefined behavior in wl_array_for_each 2024-03-24 20:00:01 -04:00
scanner-test.sh util: fix undefined behavior in wl_array_for_each 2024-03-24 20:00:01 -04:00
signal-test.c server: introduce wl_signal_emit_mutable 2022-03-28 19:06:16 +00:00
socket-test.c Check that XDG base directories paths are absolute 2022-06-09 18:34:17 +00:00
test-compositor.c compat: prefer waitpid() over waitid() 2024-02-21 15:46:41 +00:00
test-compositor.h tests: Support tests that check for client failure 2023-02-28 11:22:04 +00:00
test-helpers.c build: fix build and provide compat for OpenBSD 2024-02-21 15:46:41 +00:00
test-runner.c build: fix build and provide compat for OpenBSD 2024-02-21 15:46:41 +00:00
test-runner.h tests: Remove memory leak checking infrastructure 2018-08-29 09:59:04 +01:00