[Spice-devel] [spice-gtk][PATCH] spice-widget: Don't crash when Display is NULL

Fabiano FidĂȘncio fabiano at fidencio.org
Mon Nov 24 08:04:54 PST 2014


On Mon, Nov 24, 2014 at 4:28 PM, Christophe Fergeau <cfergeau at redhat.com> wrote:
> On Mon, Nov 24, 2014 at 01:25:51AM +0100, Fabiano FidĂȘncio wrote:
>> Return early or warn when SpiceDisplay is NULL instead of crash, avoiding
>> segfaults when running on windows using GTK3
>> ---
>>  gtk/spice-widget.c | 16 +++++++++++++---
>>  1 file changed, 13 insertions(+), 3 deletions(-)
>>
>> diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c
>> index ae11073..67429f0 100644
>> --- a/gtk/spice-widget.c
>> +++ b/gtk/spice-widget.c
>> @@ -701,9 +701,12 @@ SpiceGrabSequence *spice_display_get_grab_keys(SpiceDisplay *display)
>>  static void try_keyboard_grab(SpiceDisplay *display)
>>  {
>>      GtkWidget *widget = GTK_WIDGET(display);
>> +    GdkWindow *window = gtk_widget_get_window(widget);
>>      SpiceDisplayPrivate *d = display->priv;
>>      GdkGrabStatus status;
>>
>> +    g_return_if_fail(window != NULL);
>> +
>>      if (g_getenv("SPICE_NOGRAB"))
>>          return;
>>      if (d->disable_inputs)
>> @@ -731,8 +734,8 @@ static void try_keyboard_grab(SpiceDisplay *display)
>>                                              GetModuleHandle(NULL), 0);
>>      g_warn_if_fail(d->keyboard_hook != NULL);
>>  #endif
>> -    status = gdk_keyboard_grab(gtk_widget_get_window(widget), FALSE,
>> -                               GDK_CURRENT_TIME);
>> +
>> +    status = gdk_keyboard_grab(window, FALSE, GDK_CURRENT_TIME);
>>      if (status != GDK_GRAB_SUCCESS) {
>>          g_warning("keyboard grab failed %d", status);
>>          d->keyboard_grab_active = false;
>> @@ -1294,7 +1297,14 @@ static gboolean check_for_grab_key(SpiceDisplay *display, int type, int keyval)
>>  static void update_display(SpiceDisplay *display)
>>  {
>>  #ifdef G_OS_WIN32
>> -    win32_window = display ? GDK_WINDOW_HWND(gtk_widget_get_window(GTK_WIDGET(display))) : NULL;
>> +    GdkWindow *window = NULL;
>> +
>> +    if (display != NULL) {
>> +        window = gtk_widget_get_window(GTK_WIDGET(display));
>> +        g_warn_if_fail (window != NULL);
>> +    }
>> +
>> +    win32_window = window ? GDK_WINDOW_HWND(window) : NULL;
>>  #endif
>
> For what it's worth, this hunk seems to be more about protecting against
> a NULL window (which could come from
> gtk_widget_get_window(GTK_WIDGET(NULL))) than protecting against a NULL
> display.
>

 I see your point. Would be better a different patch for this part.

Best Regards,
-- 
Fabiano FidĂȘncio


More information about the Spice-devel mailing list