]> source.dussan.org Git - sonarqube.git/commitdiff
Fix SSF-139
authorGrégoire Aubert <gregoire.aubert@sonarsource.com>
Fri, 12 Feb 2021 09:17:54 +0000 (10:17 +0100)
committersonartech <sonartech@sonarsource.com>
Fri, 12 Feb 2021 20:06:21 +0000 (20:06 +0000)
server/sonar-web/src/main/js/helpers/__tests__/l10n-test.ts
server/sonar-web/src/main/js/helpers/l10n.ts

index cf5d1769e2b1b68ab6fbb47f8f155417b45dc98a..875921a4f9989f3c883d6f0f6f29020c2dd22cc8 100644 (file)
@@ -67,6 +67,11 @@ describe('#translateWithParameters', () => {
     );
   });
 
+  it('should not be affected by replacement pattern XSS vulnerability of String.replace', () => {
+    resetBundle({ y_apples: 'I have {0} apples' });
+    expect(translateWithParameters('y_apples', '$`')).toBe('I have $` apples');
+  });
+
   it('should not translate message but return its key', () => {
     expect(translateWithParameters('random', 5)).toBe('random.5');
     expect(translateWithParameters('random', 1, 2, 3)).toBe('random.1.2.3');
index 6e13e95de9128b261c2e63c83c6af7930f992339..bbffbaa76a192defe000b5c57271f3fff60eee00 100644 (file)
@@ -62,7 +62,7 @@ export function translateWithParameters(
   if (message) {
     return parameters
       .map(parameter => String(parameter))
-      .reduce((acc, parameter, index) => acc.replace(`{${index}}`, parameter), message);
+      .reduce((acc, parameter, index) => acc.replace(`{${index}}`, () => parameter), message);
   } else {
     if (process.env.NODE_ENV === 'development') {
       // eslint-disable-next-line