XPutBackEvent copies an XEvent internally, so the pointer passed in must

point to an actual XEvent object, not an XConfigureEvent, which is
smaller. This avoids an invalid stack read.
This commit is contained in:
Lindley French 2014-04-10 16:07:03 -07:00
parent ed10f72c86
commit 94ee505f8a

View File

@ -137,7 +137,7 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title,
XEvent eventReturnBuffer; /* return buffer required for a call */ XEvent eventReturnBuffer; /* return buffer required for a call */
unsigned long mask; unsigned long mask;
unsigned int current_DisplayMode = fgState.DisplayMode ; unsigned int current_DisplayMode = fgState.DisplayMode ;
XConfigureEvent fakeEvent = {0}; XEvent fakeEvent = {0};
/* Save the display mode if we are creating a menu window */ /* Save the display mode if we are creating a menu window */
if( window->IsMenu && ( ! fgStructure.MenuContext ) ) if( window->IsMenu && ( ! fgStructure.MenuContext ) )
@ -247,14 +247,14 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title,
/* Fake configure event to force viewport setup /* Fake configure event to force viewport setup
* even with no window manager. * even with no window manager.
*/ */
fakeEvent.type = ConfigureNotify; fakeEvent.xconfigure.type = ConfigureNotify;
fakeEvent.display = fgDisplay.pDisplay.Display; fakeEvent.xconfigure.display = fgDisplay.pDisplay.Display;
fakeEvent.window = window->Window.Handle; fakeEvent.xconfigure.window = window->Window.Handle;
fakeEvent.x = x; fakeEvent.xconfigure.x = x;
fakeEvent.y = y; fakeEvent.xconfigure.y = y;
fakeEvent.width = w; fakeEvent.xconfigure.width = w;
fakeEvent.height = h; fakeEvent.xconfigure.height = h;
XPutBackEvent(fgDisplay.pDisplay.Display, (XEvent*)&fakeEvent); XPutBackEvent(fgDisplay.pDisplay.Display, &fakeEvent);
/* /*
* The GLX context creation, possibly trying the direct context rendering * The GLX context creation, possibly trying the direct context rendering