mirror of
https://github.com/tenrok/axios.git
synced 2026-06-20 20:00:40 +03:00
fix: Regular Expression Denial of Service (ReDoS) (#6132)
This commit is contained in:
@@ -10,6 +10,6 @@
|
|||||||
*/
|
*/
|
||||||
export default function combineURLs(baseURL, relativeURL) {
|
export default function combineURLs(baseURL, relativeURL) {
|
||||||
return relativeURL
|
return relativeURL
|
||||||
? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
|
? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '')
|
||||||
: baseURL;
|
: baseURL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -178,10 +178,25 @@ describe('defaults', function () {
|
|||||||
const instance = axios.create();
|
const instance = axios.create();
|
||||||
axios.defaults.baseURL = 'http://example.org/';
|
axios.defaults.baseURL = 'http://example.org/';
|
||||||
|
|
||||||
|
instance.get('/foo/users');
|
||||||
|
|
||||||
|
getAjaxRequest().then(function (request) {
|
||||||
|
expect(request.url).toBe('/foo/users');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should resistent to ReDoS attack', function (done) {
|
||||||
|
const instance = axios.create();
|
||||||
|
const start = performance.now();
|
||||||
|
const slashes = '/'.repeat(100000);
|
||||||
|
instance.defaults.baseURL = '/' + slashes + 'bar/';
|
||||||
instance.get('/foo');
|
instance.get('/foo');
|
||||||
|
|
||||||
getAjaxRequest().then(function (request) {
|
getAjaxRequest().then(function (request) {
|
||||||
expect(request.url).toBe('/foo');
|
const elapsedTimeMs = performance.now() - start;
|
||||||
|
expect(elapsedTimeMs).toBeLessThan(20);
|
||||||
|
expect(request.url).toBe('/' + slashes + 'bar/foo');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user