Skip to content

Commit 239af19

Browse files
authored
Merge pull request #71 from empreinte-digitale/fix-prototype-pollution-70
Fixed string formatting
2 parents 53fb8dc + 24bcab9 commit 239af19

1 file changed

Lines changed: 14 additions & 20 deletions

File tree

src/utils/i18n.js

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
1-
String.prototype.format = function () {
2-
'use strict';
3-
var str = this.toString();
4-
5-
var t = typeof arguments[0];
6-
var args;
7-
if (arguments.length == 0) args = {};
8-
else
9-
args =
10-
'string' === t || 'number' === t
11-
? Array.prototype.slice.call(arguments)
12-
: arguments[0];
1+
function format(string, ...args) {
2+
var t = typeof args[0];
3+
var values;
4+
if (args.length == 0) values = {};
5+
else values = 'string' === t || 'number' === t ? args : args[0];
136

147
var splits = [];
158

16-
var s = str;
9+
var s = string;
1710
while (s.length > 0) {
1811
var m = s.match(/\{(?!\{)([\w\d]+)\}(?!\})/);
1912
if (m !== null) {
@@ -24,18 +17,18 @@ String.prototype.format = function () {
2417
splits.push(left);
2518
if (n != n) {
2619
// not a number
27-
splits.push(args[m[1]]);
20+
splits.push(values[m[1]]);
2821
} else {
2922
// a numbered argument
30-
splits.push(args[n]);
23+
splits.push(values[n]);
3124
}
3225
} else {
3326
splits.push(s);
3427
s = '';
3528
}
3629
}
3730
return splits;
38-
};
31+
}
3932

4033
export function language() {
4134
return window.language || document.documentElement.lang || 'en';
@@ -61,14 +54,15 @@ export function t(trans, lang, debug, key) {
6154
if (value === undefined) {
6255
if (debug) {
6356
console.log(
64-
'[missing translation: {lang}/{key}]'
65-
.format({key: kl.join('/'), lang: lang})
66-
.join('')
57+
format('[missing translation: {lang}/{key}]', {
58+
key: kl.join('/'),
59+
lang: lang
60+
}).join('')
6761
);
6862
}
6963
return false;
7064
}
7165
const params = Array.prototype.slice.call(arguments, 4);
72-
if (params.length > 0) return value.format(...params);
66+
if (params.length > 0) return format(value, ...params);
7367
return value;
7468
}

0 commit comments

Comments
 (0)