aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2025-07-23 15:15:04 +0200
committerMarkus Armbruster <armbru@redhat.com>2025-09-01 12:51:37 +0200
commita12ff7f807e3ae2e254ac1de45c3892831479a0f (patch)
treeec7a11ee2aa2fcfde340e86b330c276e8424d2eb
parent91589bcd9fee0e66b241d04e5f37cd4f218187a2 (diff)
downloadqemu-a12ff7f807e3ae2e254ac1de45c3892831479a0f.zip
qemu-a12ff7f807e3ae2e254ac1de45c3892831479a0f.tar.gz
qemu-a12ff7f807e3ae2e254ac1de45c3892831479a0f.tar.bz2
ui/keymaps: Avoid trace crash and improve error messages
parse_keyboard_layout() passes a possibly null @filename to trace_keymap_parse(). Trace backend log then formats it with %s, which crashes on some systems. Fix by moving the null check before the trace_keymap_parse(). While there, improve the error messages a bit. Fixes: d3b787fa7dde (keymaps: add tracing) Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250723131504.1482657-1-armbru@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
-rw-r--r--ui/keymaps.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/ui/keymaps.c b/ui/keymaps.c
index 6ceaa97..2359dbf 100644
--- a/ui/keymaps.c
+++ b/ui/keymaps.c
@@ -86,19 +86,25 @@ static int parse_keyboard_layout(kbd_layout_t *k,
const name2keysym_t *table,
const char *language, Error **errp)
{
+ g_autofree char *filename = NULL;
int ret;
FILE *f;
- char * filename;
char line[1024];
char keyname[64];
int len;
filename = qemu_find_file(QEMU_FILE_TYPE_KEYMAP, language);
+ if (!filename) {
+ error_setg(errp, "could not find keymap file for language '%s'",
+ language);
+ return -1;
+ }
+
trace_keymap_parse(filename);
- f = filename ? fopen(filename, "r") : NULL;
- g_free(filename);
+
+ f = fopen(filename, "r");
if (!f) {
- error_setg(errp, "could not read keymap file: '%s'", language);
+ error_setg_file_open(errp, errno, filename);
return -1;
}