Skip to content

Commit 0debc41

Browse files
committed
-> v2.0.1
1 parent 657c8c4 commit 0debc41

File tree

4 files changed

+13
-4
lines changed

4 files changed

+13
-4
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# devalue changelog
22

3+
## 2.0.1
4+
5+
* Prevent regex XSS vulnerability in non-Node environments
6+
37
## 2.0.0
48

59
* Change license to MIT

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "devalue",
33
"description": "Gets the job done when JSON.stringify can't",
4-
"version": "2.0.0",
4+
"version": "2.0.1",
55
"repository": "Rich-Harris/devalue",
66
"main": "dist/devalue.umd.js",
77
"module": "dist/devalue.esm.js",

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export default function devalue(value: any) {
101101
return `Object(${stringify(thing.valueOf())})`;
102102

103103
case 'RegExp':
104-
return thing.toString();
104+
return `new RegExp(${stringifyString(thing.source)}, "${thing.flags}")`;
105105

106106
case 'Date':
107107
return `new Date(${thing.getTime()})`;

test/test.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ describe('devalue', () => {
2525
test('null', null, 'null');
2626
test('NaN', NaN, 'NaN');
2727
test('Infinity', Infinity, 'Infinity');
28-
test('RegExp', /regexp/img, '/regexp/gim');
28+
test('RegExp', /regexp/img, 'new RegExp("regexp", "gim")');
2929
test('Date', new Date(1e12), 'new Date(1000000000000)');
3030
test('Array', ['a', 'b', 'c'], '["a","b","c"]');
3131
test('Array (empty)', [], '[]');
@@ -92,7 +92,12 @@ describe('devalue', () => {
9292
'Dangerous key',
9393
{ '<svg onload=alert("xss_works")>': 'bar' },
9494
'{"\\u003Csvg onload=alert(\\"xss_works\\")\\u003E":"bar"}'
95-
)
95+
);
96+
test(
97+
'Dangerous regex',
98+
/[</script><script>alert('xss')//]/,
99+
`new RegExp("[\\u003C\\\\\\u002Fscript\\u003E\\u003Cscript\\u003Ealert('xss')\\\\\\u002F\\\\\\u002F]", "")`
100+
);
96101
});
97102

98103
describe('misc', () => {

0 commit comments

Comments
 (0)