Acked-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx> On Fri, 2016-06-10 at 10:56 +0100, Frediano Ziglio wrote: > This prevents a possible crash on windows 32 bit. > The linkage of UnhookWindowsHookEx is WINAPI which is __stdcall while > callback for g_clear_pointer is C. This could cause stack pointer > corruption depending on compiler flags. > On __stdcall linkage function change the stack pointer while returning > from a function removing the parameters. On C linkage function leave > the stack pointer unchanged. So if the compiler call a __stdcall > function as a C function it expect the stack pointer to be unchanged > causing the pointer to be inconsistent by an offset. > > Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > --- > src/spice-widget.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > Changes from v1: > - extend commit message. > > diff --git a/src/spice-widget.c b/src/spice-widget.c > index b5936bc..c528614 100644 > --- a/src/spice-widget.c > +++ b/src/spice-widget.c > @@ -827,7 +827,11 @@ static void try_keyboard_ungrab(SpiceDisplay *display) > SPICE_DEBUG("ungrab keyboard"); > gdk_keyboard_ungrab(GDK_CURRENT_TIME); > #ifdef G_OS_WIN32 > - g_clear_pointer(&d->keyboard_hook, UnhookWindowsHookEx); > + // do not use g_clear_pointer as Windows API have different linkage > + if (d->keyboard_hook) { > + UnhookWindowsHookEx(d->keyboard_hook); > + d->keyboard_hook = NULL; > + } > #endif > d->keyboard_grab_active = false; > g_signal_emit(widget, signals[SPICE_DISPLAY_KEYBOARD_GRAB], 0, false); _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel