From: Luca Boccassi Date: Fri, 10 Jul 2026 16:59:24 +0000 (+0100) Subject: vconsole: reject empty layout during keymap conversion with error X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=57db794b9dc99e611ef1be21d60011c13fec5ed0;p=thirdparty%2Fsystemd.git vconsole: reject empty layout during keymap conversion with error A leading-dash console keymap or leading-comma X11 layout can produce an empty layout while converting between the two formats. find_converted_keymap() then asserts on it, allowing malformed input to abort callers such as localed. Return EINVAL for an empty derived layout instead. Follow-up for 6d0f5027364518ef17ef91b61dad945e1c4fd0f5 --- diff --git a/src/locale/test-localed-util.c b/src/locale/test-localed-util.c index 8e41406298a..9bcc8020096 100644 --- a/src/locale/test-localed-util.c +++ b/src/locale/test-localed-util.c @@ -79,6 +79,11 @@ TEST(vconsole_convert_to_x11) { ASSERT_OK(vconsole_convert_to_x11(&vc, x11_context_verify, &xc)); ASSERT_TRUE(x11_context_isempty(&xc)); + log_info("/* test leading-dash keymap */"); + ASSERT_OK(free_and_strdup(&vc.keymap, "-foo")); + ASSERT_ERROR(vconsole_convert_to_x11(&vc, x11_context_verify, &xc), EINVAL); + ASSERT_TRUE(x11_context_isempty(&xc)); + log_info("/* test without variant, new mapping (es:) */"); ASSERT_OK(free_and_strdup(&vc.keymap, "es")); ASSERT_OK(vconsole_convert_to_x11(&vc, x11_context_verify, &xc)); @@ -148,6 +153,11 @@ TEST(x11_convert_to_vconsole) { ASSERT_OK(x11_convert_to_vconsole(&xc, &vc)); ASSERT_TRUE(vc_context_isempty(&vc)); + log_info("/* test leading-comma layout */"); + ASSERT_OK(free_and_strdup(&xc.layout, ",us")); + ASSERT_ERROR(x11_convert_to_vconsole(&xc, &vc), EINVAL); + ASSERT_TRUE(vc_context_isempty(&vc)); + log_info("/* test without variant, new mapping (es:) */"); ASSERT_OK(free_and_strdup(&xc.layout, "es")); ASSERT_OK(x11_convert_to_vconsole(&xc, &vc)); diff --git a/src/shared/vconsole-util.c b/src/shared/vconsole-util.c index 9e56ce823df..a780b273aab 100644 --- a/src/shared/vconsole-util.c +++ b/src/shared/vconsole-util.c @@ -352,9 +352,11 @@ int find_converted_keymap(const X11Context *xc, char **ret) { int r; assert(xc); - assert(!isempty(xc->layout)); assert(ret); + if (isempty(xc->layout)) + return -EINVAL; + if (xc->variant) n = strjoin(xc->layout, "-", xc->variant); else