diff mbox

ui/gtk: fix crash at startup when no console is available

Message ID 1483263585-8101-1-git-send-email-hpoussin@reactos.org
State New
Headers show

Commit Message

Hervé Poussineau Jan. 1, 2017, 9:39 a.m. UTC
This patch fixes a segfault at QEMU startup, introduced in a08156321ab9a7d2fed9ee77dbfeea2a61ffd153.
gd_vc_find_current() return NULL, which is dereferenced without checking it.

While at it, disable the whole 'View' menu if no console exists.

Reproducer: qemu-system-i386 -M none -nodefaults

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 ui/gtk.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Stefan Hajnoczi Jan. 3, 2017, 4:32 p.m. UTC | #1
On Sun, Jan 01, 2017 at 10:39:45AM +0100, Hervé Poussineau wrote:
> This patch fixes a segfault at QEMU startup, introduced in a08156321ab9a7d2fed9ee77dbfeea2a61ffd153.
> gd_vc_find_current() return NULL, which is dereferenced without checking it.
> 
> While at it, disable the whole 'View' menu if no console exists.
> 
> Reproducer: qemu-system-i386 -M none -nodefaults
> 
> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
> ---
>  ui/gtk.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)

Oops, sorry!

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
diff mbox

Patch

diff --git a/ui/gtk.c b/ui/gtk.c
index a216216..406de4f 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -2171,6 +2171,8 @@  static gboolean gtkinit;
 
 void gtk_display_init(DisplayState *ds, bool full_screen, bool grab_on_hover)
 {
+    VirtualConsole *vc;
+
     GtkDisplayState *s = g_malloc0(sizeof(*s));
     char *filename;
     GdkDisplay *window_display;
@@ -2249,9 +2251,11 @@  void gtk_display_init(DisplayState *ds, bool full_screen, bool grab_on_hover)
     }
 #endif
 
+    vc = gd_vc_find_current(s);
+    gtk_widget_set_sensitive(s->view_menu, vc != NULL);
 #ifdef CONFIG_VTE
     gtk_widget_set_sensitive(s->copy_item,
-                             gd_vc_find_current(s)->type == GD_VC_VTE);
+                             vc && vc->type == GD_VC_VTE);
 #endif
 
     if (full_screen) {