fix: validate sender for replies in ipcMainInternalUtils.invokeInWebContents() (#17416)

This commit is contained in:
Milan Burda 2019-03-26 02:15:51 +01:00 committed by Cheng Zhao
parent 95df531b33
commit cbd884060e

View file

@ -29,9 +29,17 @@ let nextId = 0
export function invokeInWebContents<T> (sender: Electron.WebContentsInternal, command: string, ...args: any[]) {
return new Promise<T>((resolve, reject) => {
const requestId = ++nextId
ipcMainInternal.once(`${command}_RESPONSE_${requestId}`, (
_event, error: Electron.SerializedError, result: any
) => {
const channel = `${command}_RESPONSE_${requestId}`
ipcMainInternal.on(channel, function handler (
event, error: Electron.SerializedError, result: any
) {
if (event.sender !== sender) {
console.error(`Reply to ${command} sent by unexpected WebContents (${event.sender.id})`)
return
}
ipcMainInternal.removeListener(channel, handler)
if (error) {
reject(errorUtils.deserialize(error))
} else {