martinpitt / umockdev

Mock hardware devices for creating unit tests and bug reporting

Home Page:https://launchpad.net/umockdev

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

valgrind errors in rawhide

martinpitt opened this issue · comments

The valgrind checks recently started to fail, for two different reasons. One can be reproduced in a DEBUG=1 test container with

G_DEBUG=fatal-warnings,fatal-criticals,gc-friendly MALLOC_CHECK_=3 LD_LIBRARY_PATH=. PATH=.:$PATH GI_TYPELIB_PATH=. TOP_SRCDIR=/source /source/src/umockdev-wrapper valgrind -q --leak-check=full --show-possibly-lost=no --errors-for-leak-kinds=definite --error-exitcode=33 --trace-children=yes --trace-children-skip=/bin*,/usr/bin/*,/usr/local/bin/* ./test-umockdev -p /umockdev-testbed/add_device_errors

which fails with

==2116== Conditional jump or move depends on uninitialised value(s)
==2116==    at 0x4974595: g_match_info_next (gregex.c:1051)
==2116==    by 0x49747AA: g_regex_match_full (gregex.c:2162)
==2116==    by 0x49748D0: g_regex_match (gregex.c:2069)
==2116==    by 0x48B5239: umockdev_testbed_record_parse_line (umockdev.vala:1479)
==2116==    by 0x48B0318: umockdev_testbed_add_dev_from_string (umockdev.vala:1303)
==2116==    by 0x48A6CF5: umockdev_testbed_add_from_string (umockdev.vala:727)
==2116==    by 0x408785: t_testbed_add_device_errors (test-umockdev.c:476)
==2116==    by 0x498AB2D: UnknownInlinedFun (gtestutils.c:2933)
==2116==    by 0x498AB2D: g_test_run_suite_internal (gtestutils.c:3021)
==2116==    by 0x498A894: g_test_run_suite_internal (gtestutils.c:3038)
==2116==    by 0x498AFFA: g_test_run_suite (gtestutils.c:3112)
==2116==    by 0x498359C: UnknownInlinedFun (gtestutils.c:2234)
==2116==    by 0x498359C: g_test_run (gtestutils.c:2221)
==2116==    by 0x41BCC9: main (test-umockdev.c:2410)
==2116== 
==2116== Conditional jump or move depends on uninitialised value(s)
==2116==    at 0x4974595: g_match_info_next (gregex.c:1051)
==2116==    by 0x49747AA: g_regex_match_full (gregex.c:2162)
==2116==    by 0x49748D0: g_regex_match (gregex.c:2069)
==2116==    by 0x48B5353: umockdev_testbed_record_parse_line (umockdev.vala:1482)
==2116==    by 0x48B0318: umockdev_testbed_add_dev_from_string (umockdev.vala:1303)
==2116==    by 0x48A6CF5: umockdev_testbed_add_from_string (umockdev.vala:727)
==2116==    by 0x408785: t_testbed_add_device_errors (test-umockdev.c:476)
==2116==    by 0x498AB2D: UnknownInlinedFun (gtestutils.c:2933)
==2116==    by 0x498AB2D: g_test_run_suite_internal (gtestutils.c:3021)
==2116==    by 0x498A894: g_test_run_suite_internal (gtestutils.c:3038)
==2116==    by 0x498AFFA: g_test_run_suite (gtestutils.c:3112)
==2116==    by 0x498359C: UnknownInlinedFun (gtestutils.c:2234)
==2116==    by 0x498359C: g_test_run (gtestutils.c:2221)
==2116==    by 0x41BCC9: main (test-umockdev.c:2410)
==2116== 
# DEBUG: umockdev.vala:1363: creating device /devices/target (subsystem foo)
==2116== Conditional jump or move depends on uninitialised value(s)
==2116==    at 0x4974595: g_match_info_next (gregex.c:1051)
==2116==    by 0x49747AA: g_regex_match_full (gregex.c:2162)
==2116==    by 0x49760CF: g_regex_replace_eval (gregex.c:3354)
==2116==    by 0x497651A: g_regex_replace_literal (gregex.c:3255)
==2116==    by 0x48A2848: string_replace (glib-2.0.vapi:1548)
==2116==    by 0x48A43B1: umockdev_testbed_add_devicev_no_uevent (umockdev.vala:486)
==2116==    by 0x48B2FB2: umockdev_testbed_add_dev_from_string (umockdev.vala:1364)
==2116==    by 0x48A6CF5: umockdev_testbed_add_from_string (umockdev.vala:727)
==2116==    by 0x408785: t_testbed_add_device_errors (test-umockdev.c:476)
==2116==    by 0x498AB2D: UnknownInlinedFun (gtestutils.c:2933)
==2116==    by 0x498AB2D: g_test_run_suite_internal (gtestutils.c:3021)
==2116==    by 0x498A894: g_test_run_suite_internal (gtestutils.c:3038)
==2116==    by 0x498AFFA: g_test_run_suite (gtestutils.c:3112)

Most tests fail due to this. This smells like a bug in glib, as it happens through other code paths as well, e.g.

==3350== Conditional jump or move depends on uninitialised value(s)
==3350==    at 0x4974595: g_match_info_next (gregex.c:1051)
==3350==    by 0x49747AA: g_regex_match_full (gregex.c:2162)
==3350==    by 0x49748D0: g_regex_match (gregex.c:2069)
==3350==    by 0x48ABE3C: umockdev_testbed_load_evemu_events (umockdev.vala:1086)

Wasn't GRegex recently ported to a newer version of the PCRE library?

i.e. https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2529

This is an actual issue, tracked in https://gitlab.gnome.org/GNOME/glib/-/issues/2741 . It was fixed 5 days ago, and just needs a new release now. I'll give this a few more days then, as it's awkward to ignore.

This should be fixed in glib 2.74.0, which is in rawhide, Debian unstable, and Ubuntu devel series now. And indeed the latest run is all green again! 💚