Skip to content

Commit 4840cb2

Browse files
fix: regular expression denial of service issues (#6708)
* fix: Regular Expression Denial of Service (ReDoS) * fix test failed
1 parent 2e36cdb commit 4840cb2

2 files changed

Lines changed: 14 additions & 2 deletions

File tree

‎lib/helpers/combineURLs.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@
99
*/
1010
module.exports = function combineURLs(baseURL, relativeURL) {
1111
return relativeURL
12-
? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
12+
? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '')
1313
: baseURL;
1414
};

‎test/specs/defaults.spec.js‎

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,10 +177,22 @@ describe('defaults', function () {
177177
var instance = axios.create();
178178
axios.defaults.baseURL = 'http://example.org/';
179179

180+
instance.get('/foo/users');
181+
182+
getAjaxRequest().then(function (request) {
183+
expect(request.url).toBe('/foo/users');
184+
done();
185+
});
186+
});
187+
188+
it('should resistent to ReDoS attack', function (done) {
189+
const instance = axios.create();
190+
const slashes = '/'.repeat(100000);
191+
instance.defaults.baseURL = '/' + slashes + 'bar/';
180192
instance.get('/foo');
181193

182194
getAjaxRequest().then(function (request) {
183-
expect(request.url).toBe('/foo');
195+
expect(request.url).toBe('/' + slashes + 'bar/foo');
184196
done();
185197
});
186198
});

0 commit comments

Comments
 (0)