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.

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1680 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
dcnieho 2014-04-11 13:41:49 +00:00
parent d0c5d990d7
commit 18718163db

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