Skip to content

Commit cbaaf6a

Browse files
authored
fix: bounds-check the IPC result before accessing. (electron#24041)
* fix: bounds-check the IPC result before accessing. * fix: address feedback about safety checking JS too * fix: address feedback: check JS array length, too.
1 parent 4fb7b33 commit cbaaf6a

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

lib/renderer/api/ipc-renderer.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ if (!ipcRenderer.send) {
1313
};
1414

1515
ipcRenderer.sendSync = function (channel, ...args) {
16-
return ipc.sendSync(internal, channel, args)[0];
16+
const result = ipc.sendSync(internal, channel, args);
17+
if (!Array.isArray(result) || result.length !== 1) {
18+
throw new Error(`Unexpected return value from ipcRenderer.sendSync: ${result}`);
19+
}
20+
return result[0];
1721
};
1822

1923
ipcRenderer.sendToHost = function (channel, ...args) {

shell/renderer/api/atom_api_renderer_ipc.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ class IPCRenderer : public mate::Wrappable<IPCRenderer> {
102102

103103
electron_browser_ptr_->MessageSync(internal, channel, std::move(arguments),
104104
&result);
105+
106+
if (!result.is_list() || result.GetList().empty())
107+
return base::Value{};
108+
105109
return std::move(result.GetList().at(0));
106110
}
107111

0 commit comments

Comments
 (0)