fix: heap-use-after-free in tray.popUpContextMenu (#22842)
This commit is contained in:
parent
8ff7a1160a
commit
ac501e8194
2 changed files with 15 additions and 0 deletions
|
@ -181,8 +181,16 @@
|
|||
useDefaultAccelerator:NO]);
|
||||
// Hacky way to mimic design of ordinary tray menu.
|
||||
[statusItem_ setMenu:[menuController menu]];
|
||||
// -performClick: is a blocking call, which will run the task loop inside
|
||||
// itself. This can potentially include running JS, which can result in
|
||||
// this object being released. We take a temporary reference here to make
|
||||
// sure we stay alive long enough to successfully return from this
|
||||
// function.
|
||||
// TODO(nornagon/codebytere): Avoid nesting task loops here.
|
||||
[self retain];
|
||||
[[statusItem_ button] performClick:self];
|
||||
[statusItem_ setMenu:[menuController_ menu]];
|
||||
[self release];
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -73,6 +73,13 @@ describe('tray module', () => {
|
|||
});
|
||||
tray.popUpContextMenu();
|
||||
});
|
||||
|
||||
it('can be called with a menu', () => {
|
||||
const menu = Menu.buildFromTemplate([{ label: 'Test' }]);
|
||||
expect(() => {
|
||||
tray.popUpContextMenu(menu);
|
||||
}).to.not.throw();
|
||||
});
|
||||
});
|
||||
|
||||
describe('tray.closeContextMenu()', () => {
|
||||
|
|
Loading…
Reference in a new issue