mirror of
https://github.com/systemd/systemd.git
synced 2026-08-11 01:25:28 +00:00
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 6d0f502736
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user