Skip to content

Commit d550b15

Browse files
author
Loïc Mangeonjean
committed
fix: bind domsanitize on proper window
1 parent 21da1db commit d550b15

File tree

1 file changed

+61
-1
lines changed

1 file changed

+61
-1
lines changed

vscode-patches/0070-feat-centralize-element-creation-to-be-able-to-creat.patch

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Subject: [PATCH] feat: centralize element creation, to be able to create them
66

77
---
88
src/vs/base/browser/dom.ts | 38 +++++++---
9+
src/vs/base/browser/domSanitize.ts | 15 ++--
910
src/vs/base/browser/domStylesheets.ts | 4 +-
1011
src/vs/base/browser/formattedTextRenderer.ts | 14 ++--
1112
src/vs/base/browser/markdownRenderer.ts | 2 +-
@@ -185,7 +186,7 @@ Subject: [PATCH] feat: centralize element creation, to be able to create them
185186
.../browser/walkThroughPart.ts | 6 +-
186187
.../browser/webWorkerExtensionHost.ts | 2 +-
187188
.../host/browser/browserHostService.ts | 6 +-
188-
180 files changed, 604 insertions(+), 538 deletions(-)
189+
181 files changed, 613 insertions(+), 544 deletions(-)
189190

190191
diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts
191192
index 4a327189baa..8536885086c 100644
@@ -284,6 +285,65 @@ index 4a327189baa..8536885086c 100644
284285
if (ref) {
285286
ref(this._element);
286287
}
288+
diff --git a/src/vs/base/browser/domSanitize.ts b/src/vs/base/browser/domSanitize.ts
289+
index 9b88e3c0dfa..fe5c564dfc6 100644
290+
--- a/src/vs/base/browser/domSanitize.ts
291+
+++ b/src/vs/base/browser/domSanitize.ts
292+
@@ -7,6 +7,9 @@ import { Schemas } from '../common/network.js';
293+
import { reset } from './dom.js';
294+
// eslint-disable-next-line no-restricted-imports
295+
import dompurify from './dompurify/dompurify.js';
296+
+import { mainWindow } from './window.js';
297+
+
298+
+const mainWindowDompurify = dompurify(mainWindow);
299+
300+
/**
301+
* List of safe, non-input html tags.
302+
@@ -139,7 +142,7 @@ function validateLink(value: string, allowedProtocols: AllowedLinksConfig): bool
303+
* attributes are valid.
304+
*/
305+
function hookDomPurifyHrefAndSrcSanitizer(allowedLinkProtocols: AllowedLinksConfig, allowedMediaProtocols: AllowedLinksConfig) {
306+
- dompurify.addHook('afterSanitizeAttributes', (node) => {
307+
+ mainWindowDompurify.addHook('afterSanitizeAttributes', (node) => {
308+
// check all href/src attributes for validity
309+
for (const attr of ['href', 'src']) {
310+
if (node.hasAttribute(attr)) {
311+
@@ -301,11 +304,11 @@ function doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefine
312+
});
313+
314+
if (config?.replaceWithPlaintext) {
315+
- dompurify.addHook('uponSanitizeElement', replaceWithPlainTextHook);
316+
+ mainWindowDompurify.addHook('uponSanitizeElement', replaceWithPlainTextHook);
317+
}
318+
319+
if (allowedAttrPredicates.size) {
320+
- dompurify.addHook('uponSanitizeAttribute', (node, e) => {
321+
+ mainWindowDompurify.addHook('uponSanitizeAttribute', (node, e) => {
322+
const predicate = allowedAttrPredicates.get(e.attrName);
323+
if (predicate) {
324+
const result = predicate.shouldKeep(node, e);
325+
@@ -322,18 +325,18 @@ function doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefine
326+
}
327+
328+
if (outputType === 'dom') {
329+
- return dompurify.sanitize(untrusted, {
330+
+ return mainWindowDompurify.sanitize(untrusted, {
331+
...resolvedConfig,
332+
RETURN_DOM_FRAGMENT: true
333+
});
334+
} else {
335+
- return dompurify.sanitize(untrusted, {
336+
+ return mainWindowDompurify.sanitize(untrusted, {
337+
...resolvedConfig,
338+
RETURN_TRUSTED_TYPE: true
339+
});
340+
}
341+
} finally {
342+
- dompurify.removeAllHooks();
343+
+ mainWindowDompurify.removeAllHooks();
344+
}
345+
}
346+
287347
diff --git a/src/vs/base/browser/domStylesheets.ts b/src/vs/base/browser/domStylesheets.ts
288348
index 106c74fcb5d..d5caf0b3e24 100644
289349
--- a/src/vs/base/browser/domStylesheets.ts

0 commit comments

Comments
 (0)