Skip to content

Commit c3c73c8

Browse files
Fix potential ReDoS Vulnerability or Inefficient Regular Expression (#65)
* Create redos.js * Update index.js * Update test/redos.js --------- Co-authored-by: Julian Gruber <[email protected]>
1 parent 01a21de commit c3c73c8

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ function expand(str, isTop) {
109109
var isOptions = m.body.indexOf(',') >= 0;
110110
if (!isSequence && !isOptions) {
111111
// {a},b}
112-
if (m.post.match(/,.*\}/)) {
112+
if (m.post.match(/,(?!,).*\}/)) {
113113
str = m.pre + '{' + m.body + escClose + m.post;
114114
return expand(str);
115115
}

test/redos.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import test from 'node:test'
2+
import assert from 'assert'
3+
import expand from '../index.js'
4+
5+
test('redos', function () {
6+
let str = "{a}" + ",".repeat(100000) + "\u0000";
7+
let startTime = performance.now();
8+
expand(str)
9+
let endTime = performance.now();
10+
let timeTaken = endTime - startTime;
11+
assert.ok(timeTaken < 1000, `Expected time (${timeTaken}ms) to be less than 1000ms`);
12+
})
13+
14+
15+

0 commit comments

Comments
 (0)