Fix #342 - Enforce all regexes to comply with safe-regex as a safeguard against possible ReDoS vulnerability

This commit is contained in:
Faisal Salman 2021-03-26 19:39:00 +07:00
parent b406b5df2c
commit 2cfd792d24
2 changed files with 29 additions and 1 deletions

View File

@ -120,6 +120,7 @@
"jshint": "~2.12.0", "jshint": "~2.12.0",
"mocha": "~8.2.0", "mocha": "~8.2.0",
"requirejs": "^2.3.2", "requirejs": "^2.3.2",
"safe-regex": "^2.1.1",
"uglify-js": "~3.12.0", "uglify-js": "~3.12.0",
"verup": "^1.3.x" "verup": "^1.3.x"
}, },

View File

@ -1,3 +1,5 @@
var fs = require('fs');
var safe = require('safe-regex');
var assert = require('assert'); var assert = require('assert');
var requirejs = require('requirejs'); var requirejs = require('requirejs');
var UAParser = require('./../src/ua-parser'); var UAParser = require('./../src/ua-parser');
@ -122,3 +124,28 @@ describe('Using Require.js', function () {
}); });
}); });
}); });
describe('Testing regexes', function () {
var regexes;
// todo: use AST-based instead of grep
before('Read main js file', function (done) {
fs.readFile('src/ua-parser.js', 'utf8', function (err, data) {
regexes = data.match(/(\/.+\/[ig]+)(?=[,\s\n])/g);
done();
});
});
describe('Begin testing', function () {
it('all regexes in main file', function () {
regexes.forEach(function (regex) {
describe('Test against `safe-regex` : ' + regex, function () {
it('should be safe from potentially vulnerable regex', function () {
assert.strictEqual(safe(regex), true);
});
});
});
});
});
})