Commit b0228e18 by Corentin Wallez

OSXWindow fix a use after free of the WindowDelegate

This use after free was triggered when a window was made key and destroyed, then another window was made key. dedResignKey was called on the former's WindowDelegate which had already been freed, causing a crash. BUG=angleproject:891 Change-Id: If47e88419f9a407a6a77c5cd9853b7b4860dc698 Reviewed-on: https://chromium-review.googlesource.com/305817 Tryjob-Request: Corentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org> Tested-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent 7c89d248
...@@ -105,6 +105,11 @@ static float YCoordToFromCG(float y) ...@@ -105,6 +105,11 @@ static float YCoordToFromCG(float y)
return self; return self;
} }
- (void) onOSXWindowDeleted
{
mWindow = nil;
}
- (BOOL) windowShouldClose: (id) sender - (BOOL) windowShouldClose: (id) sender
{ {
Event event; Event event;
...@@ -138,13 +143,18 @@ static float YCoordToFromCG(float y) ...@@ -138,13 +143,18 @@ static float YCoordToFromCG(float y)
Event event; Event event;
event.Type = Event::EVENT_GAINED_FOCUS; event.Type = Event::EVENT_GAINED_FOCUS;
mWindow->pushEvent(event); mWindow->pushEvent(event);
[self retain];
} }
- (void) windowDidResignKey: (NSNotification*) notification - (void) windowDidResignKey: (NSNotification*) notification
{ {
Event event; if (mWindow != nil)
event.Type = Event::EVENT_LOST_FOCUS; {
mWindow->pushEvent(event); Event event;
event.Type = Event::EVENT_LOST_FOCUS;
mWindow->pushEvent(event);
}
[self release];
} }
@end @end
...@@ -570,6 +580,7 @@ void OSXWindow::destroy() ...@@ -570,6 +580,7 @@ void OSXWindow::destroy()
[mView release]; [mView release];
mView = nil; mView = nil;
[mDelegate onOSXWindowDeleted];
[mDelegate release]; [mDelegate release];
mDelegate = nil; mDelegate = nil;
[mWindow release]; [mWindow release];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment