From 0d9d26b1270d27b5c6d4adbb19d5a17e24502402 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 10 Oct 2018 09:18:28 +0200 Subject: [PATCH] debt - shorten workbench URL and print warning if exceeding limits --- src/vs/code/electron-main/window.ts | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/vs/code/electron-main/window.ts b/src/vs/code/electron-main/window.ts index d1eb97bfe9f..09d263fad19 100644 --- a/src/vs/code/electron-main/window.ts +++ b/src/vs/code/electron-main/window.ts @@ -57,6 +57,8 @@ export class CodeWindow implements ICodeWindow { private static readonly MIN_WIDTH = 200; private static readonly MIN_HEIGHT = 120; + private static readonly MAX_URL_LENGTH = 2000000; // https://github.com/electron/electron/issues/4470#issuecomment-183962330 + private hiddenTitleBarStyle: boolean; private showTimeoutHandle: any; private _id: number; @@ -605,11 +607,30 @@ export class CodeWindow implements ICodeWindow { const environment = parseArgs(process.argv); const config = objects.assign(environment, windowConfiguration); for (let key in config) { - if (config[key] === void 0 || config[key] === null || config[key] === '') { + if (config[key] === void 0 || config[key] === null || config[key] === '' || config[key] === false) { delete config[key]; // only send over properties that have a true value } } + // In the unlikely event of the URL becoming larger than 2MB, remove parts of + // it that are not under our control. Mainly, the user environment can be very + // large depending on user configuration, so we can only remove it in that case. + let configUrl = this.doGetUrl(config); + if (configUrl.length > CodeWindow.MAX_URL_LENGTH) { + delete config.userEnv; + this.logService.warn('Application URL exceeds maximum of 2MB and was shortened.'); + + configUrl = this.doGetUrl(config); + + if (configUrl.length > CodeWindow.MAX_URL_LENGTH) { + this.logService.error('Application URL exceeds maximum of 2MB and cannot be loaded.'); + } + } + + return configUrl; + } + + private doGetUrl(config: object): string { return `${require.toUrl('vs/code/electron-browser/workbench/workbench.html')}?config=${encodeURIComponent(JSON.stringify(config))}`; } -- GitLab