Skip to content

Commit df0229c

Browse files
feat: use dompurify to sanitize translations
Pin same version of `dompurify` used in Theia
1 parent 19bf879 commit df0229c

File tree

4 files changed

+22
-11
lines changed

4 files changed

+22
-11
lines changed

arduino-ide-extension/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
"cross-fetch": "^3.1.5",
6868
"dateformat": "^3.0.3",
6969
"deepmerge": "^4.2.2",
70+
"dompurify": "^2.4.7",
7071
"drivelist": "^9.2.4",
7172
"electron-updater": "^4.6.5",
7273
"fast-deep-equal": "^3.1.3",

arduino-ide-extension/src/browser/dialogs/ide-updater/ide-updater-dialog.tsx

+9-7
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
} from '../../../common/protocol/ide-updater';
1818
import { LocalStorageService } from '@theia/core/lib/browser';
1919
import { WindowService } from '@theia/core/lib/browser/window/window-service';
20+
import { sanitize } from 'dompurify';
2021

2122
@injectable()
2223
export class IDEUpdaterDialogProps extends DialogProps {}
@@ -173,9 +174,8 @@ export class IDEUpdaterDialog extends ReactDialog<UpdateInfo | undefined> {
173174
footer.appendChild(footerContent);
174175

175176
const footerLink = document.createElement('a');
176-
footerLink.innerText = nls.localize(
177-
'arduino/ide-updater/donateLinkText',
178-
'donate to support us'
177+
footerLink.innerText = sanitize(
178+
nls.localize('arduino/ide-updater/donateLinkText', 'donate to support us')
179179
);
180180
footerLink.classList.add('ide-updater-dialog--footer-link');
181181
footerLink.onclick = () =>
@@ -190,10 +190,12 @@ export class IDEUpdaterDialog extends ReactDialog<UpdateInfo | undefined> {
190190
footerLink.appendChild(footerLinkIcon);
191191

192192
const placeholderKey = '%%link%%';
193-
const footerText = nls.localize(
194-
'arduino/ide-updater/donateText',
195-
'Open source is love, {0}',
196-
placeholderKey
193+
const footerText = sanitize(
194+
nls.localize(
195+
'arduino/ide-updater/donateText',
196+
'Open source is love, {0}',
197+
placeholderKey
198+
)
197199
);
198200
const placeholder = footerText.indexOf(placeholderKey);
199201
if (placeholder !== -1) {

arduino-ide-extension/src/browser/dialogs/version-welcome-dialog.tsx

+7-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { nls } from '@theia/core';
66
import { DialogProps } from '@theia/core/lib/browser';
77
import { WindowService } from '@theia/core/lib/browser/window/window-service';
88
import { AppService } from '../app-service';
9+
import { sanitize } from 'dompurify';
910

1011
@injectable()
1112
export class VersionWelcomeDialogProps extends DialogProps {}
@@ -87,10 +88,12 @@ export class VersionWelcomeDialog extends ReactDialog<void> {
8788
const { appVersion } = appInfo;
8889

8990
if (appVersion) {
90-
this.titleNode.innerHTML = nls.localize(
91-
'arduino/versionWelcome/titleWithVersion',
92-
'Welcome to the new Arduino IDE {0}!',
93-
appVersion
91+
this.titleNode.innerText = sanitize(
92+
nls.localize(
93+
'arduino/versionWelcome/titleWithVersion',
94+
'Welcome to the new Arduino IDE {0}!',
95+
appVersion
96+
)
9497
);
9598
}
9699
}

yarn.lock

+5
Original file line numberDiff line numberDiff line change
@@ -5937,6 +5937,11 @@ dompurify@^2.2.9:
59375937
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.7.tgz#277adeb40a2c84be2d42a8bcd45f582bfa4d0cfc"
59385938
integrity sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==
59395939

5940+
dompurify@^2.4.7:
5941+
version "2.5.7"
5942+
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.5.7.tgz#6e0d36b9177db5a99f18ade1f28579db5ab839d7"
5943+
integrity sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==
5944+
59405945
dot-case@^3.0.4:
59415946
version "3.0.4"
59425947
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"

0 commit comments

Comments
 (0)