Skip to content

Commit 194935b

Browse files
authored
safeguard init exthost message (microsoft#142486)
1 parent 050f4a0 commit 194935b

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ export class WebWorkerExtensionHost extends Disposable implements IExtensionHost
189189

190190
// Send over message ports for extension API
191191
const messagePorts = this._environmentService.options?.messagePorts ?? new Map();
192-
iframe.contentWindow!.postMessage(messagePorts, '*', [...messagePorts.values()]);
192+
iframe.contentWindow!.postMessage({ type: 'vscode.init', data: messagePorts }, '*', [...messagePorts.values()]);
193193

194194
port.onmessage = (event) => {
195195
const { data } = event;

src/vs/workbench/services/extensions/worker/extensionHostWorker.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,20 +216,33 @@ function connectToRenderer(protocol: IMessagePassingProtocol): Promise<IRenderer
216216

217217
let onTerminate = (reason: string) => nativeClose();
218218

219+
interface IInitMessage {
220+
readonly type: 'vscode.init';
221+
readonly data: ReadonlyMap<string, MessagePort>;
222+
}
223+
224+
function isInitMessage(a: any): a is IInitMessage {
225+
return !!a && typeof a === 'object' && a.type === 'vscode.init' && a.data instanceof Map;
226+
}
227+
219228
export function create(): { onmessage: (message: any) => void } {
220229
performance.mark(`code/extHost/willConnectToRenderer`);
221230
const res = new ExtensionWorker();
222231

223232
return {
224-
onmessage(messagePorts: ReadonlyMap<string, MessagePort>) {
233+
onmessage(message: any) {
234+
if (!isInitMessage(message)) {
235+
return; // silently ignore foreign messages
236+
}
237+
225238
connectToRenderer(res.protocol).then(data => {
226239
performance.mark(`code/extHost/didWaitForInitData`);
227240
const extHostMain = new ExtensionHostMain(
228241
data.protocol,
229242
data.initData,
230243
hostUtil,
231244
null,
232-
messagePorts
245+
message.data
233246
);
234247

235248
onTerminate = (reason: string) => extHostMain.terminate(reason);

0 commit comments

Comments
 (0)