|
|
03a6ff |
From df96e6065b1da05720689b5d574732e4820826ce Mon Sep 17 00:00:00 2001
|
|
|
03a6ff |
From: Pavel Grunt <pgrunt@redhat.com>
|
|
|
03a6ff |
Date: Tue, 31 May 2016 11:01:24 +0200
|
|
|
03a6ff |
Subject: [PATCH] app: Check validity of hotkey
|
|
|
03a6ff |
MIME-Version: 1.0
|
|
|
03a6ff |
Content-Type: text/plain; charset=UTF-8
|
|
|
03a6ff |
Content-Transfer-Encoding: 8bit
|
|
|
03a6ff |
|
|
|
03a6ff |
The hotkey is valid if it has a valid value. The value is valid if it is
|
|
|
03a6ff |
not empty and is successfully parsed by gtk_accelerator_parse().
|
|
|
03a6ff |
|
|
|
03a6ff |
These hotkeys formats are considered invalid:
|
|
|
03a6ff |
"key" - missing value
|
|
|
03a6ff |
"key=" - missing value
|
|
|
03a6ff |
"key=abcd" - value cannot be parsed by gtk_accelerator_parse()
|
|
|
03a6ff |
|
|
|
03a6ff |
Resolves: rhbz#1339572
|
|
|
03a6ff |
|
|
|
03a6ff |
Acked-by: Fabiano FidĂȘncio <fidencio@redhat.com>
|
|
|
03a6ff |
(cherry picked from commit ffa460b8c6a1c900eb155d06245f42693bd13f3b)
|
|
|
03a6ff |
---
|
|
|
03a6ff |
src/virt-viewer-app.c | 13 +++++++++----
|
|
|
03a6ff |
1 file changed, 9 insertions(+), 4 deletions(-)
|
|
|
03a6ff |
|
|
|
03a6ff |
diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
|
|
|
03a6ff |
index feffd9c..89c35dd 100644
|
|
|
03a6ff |
--- a/src/virt-viewer-app.c
|
|
|
03a6ff |
+++ b/src/virt-viewer-app.c
|
|
|
03a6ff |
@@ -2073,18 +2073,23 @@ virt_viewer_app_set_hotkeys(VirtViewerApp *self, const gchar *hotkeys_str)
|
|
|
03a6ff |
|
|
|
03a6ff |
for (hotkey = hotkeys; *hotkey != NULL; hotkey++) {
|
|
|
03a6ff |
gchar *key = strstr(*hotkey, "=");
|
|
|
03a6ff |
- if (key == NULL) {
|
|
|
03a6ff |
- g_warn_if_reached();
|
|
|
03a6ff |
+ const gchar *value = (key == NULL) ? NULL : (*key = '\0', key + 1);
|
|
|
03a6ff |
+ if (value == NULL || *value == '\0') {
|
|
|
03a6ff |
+ g_warning("missing value for key '%s'", *hotkey);
|
|
|
03a6ff |
continue;
|
|
|
03a6ff |
}
|
|
|
03a6ff |
- *key = '\0';
|
|
|
03a6ff |
|
|
|
03a6ff |
- gchar *accel = spice_hotkey_to_gtk_accelerator(key + 1);
|
|
|
03a6ff |
+ gchar *accel = spice_hotkey_to_gtk_accelerator(value);
|
|
|
03a6ff |
guint accel_key;
|
|
|
03a6ff |
GdkModifierType accel_mods;
|
|
|
03a6ff |
gtk_accelerator_parse(accel, &accel_key, &accel_mods);
|
|
|
03a6ff |
g_free(accel);
|
|
|
03a6ff |
|
|
|
03a6ff |
+ if (accel_key == 0 && accel_mods == 0) {
|
|
|
03a6ff |
+ g_warning("Invalid value '%s' for key '%s'", value, *hotkey);
|
|
|
03a6ff |
+ continue;
|
|
|
03a6ff |
+ }
|
|
|
03a6ff |
+
|
|
|
03a6ff |
if (g_str_equal(*hotkey, "toggle-fullscreen")) {
|
|
|
03a6ff |
gtk_accel_map_change_entry("<virt-viewer>/view/toggle-fullscreen", accel_key, accel_mods, TRUE);
|
|
|
03a6ff |
} else if (g_str_equal(*hotkey, "release-cursor")) {
|