From 0464222aed4bc025c117df9b650d62684274c6fd Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 27 Jul 2025 04:04:27 +0900 Subject: [PATCH] locale: escape invalid keymap on logging The keymap string may come from dbus method and may contain invalid characters. --- src/locale/localed-util.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/locale/localed-util.c b/src/locale/localed-util.c index 72f317f0b0c..2842570ddac 100644 --- a/src/locale/localed-util.c +++ b/src/locale/localed-util.c @@ -9,6 +9,7 @@ #include "copy.h" #include "env-file.h" #include "errno-util.h" +#include "escape.h" #include "extract-word.h" #include "fd-util.h" #include "fileio.h" @@ -60,15 +61,16 @@ static int verify_keymap(const char *keymap, int log_level, sd_bus_error *error) assert(keymap); r = keymap_exists(keymap); /* This also verifies that the keymap name is kosher. */ - if (r < 0) { - if (error) - sd_bus_error_set_errnof(error, r, "Failed to check keymap %s: %m", keymap); - return log_full_errno(log_level, r, "Failed to check keymap %s: %m", keymap); - } - if (r == 0) { + if (r <= 0) { + _cleanup_free_ char *escaped = cescape(keymap); + if (r < 0) { + if (error) + sd_bus_error_set_errnof(error, r, "Failed to check keymap %s: %m", strna(escaped)); + return log_full_errno(log_level, r, "Failed to check keymap %s: %m", strna(escaped)); + } if (error) - sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Keymap %s is not installed.", keymap); - return log_full_errno(log_level, SYNTHETIC_ERRNO(ENOENT), "Keymap %s is not installed.", keymap); + sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Keymap %s is not installed.", strna(escaped)); + return log_full_errno(log_level, SYNTHETIC_ERRNO(ENOENT), "Keymap %s is not installed.", strna(escaped)); } return 0; -- 2.47.3