mirror of
https://github.com/faisalman/ua-parser-js.git
synced 2025-09-27 16:08:47 +03:00
Merge pull request #546 from hansott/master
✨ Use AST to verify whether regexes are safe
This commit is contained in:
commit
b86860e850
@ -160,6 +160,8 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@babel/parser": "7.15.8",
|
||||||
|
"@babel/traverse": "7.15.4",
|
||||||
"jshint": "~2.12.0",
|
"jshint": "~2.12.0",
|
||||||
"mocha": "~8.2.0",
|
"mocha": "~8.2.0",
|
||||||
"requirejs": "^2.3.2",
|
"requirejs": "^2.3.2",
|
||||||
|
21
test/test.js
21
test/test.js
@ -2,6 +2,8 @@ var fs = require('fs');
|
|||||||
var safe = require('safe-regex');
|
var safe = require('safe-regex');
|
||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
var requirejs = require('requirejs');
|
var requirejs = require('requirejs');
|
||||||
|
var parseJS = require('@babel/parser').parse;
|
||||||
|
var traverse = require('@babel/traverse').default;
|
||||||
var UAParser = require('./../src/ua-parser');
|
var UAParser = require('./../src/ua-parser');
|
||||||
var browsers = require('./browser-test.json');
|
var browsers = require('./browser-test.json');
|
||||||
var cpus = require('./cpu-test.json');
|
var cpus = require('./cpu-test.json');
|
||||||
@ -137,12 +139,19 @@ describe('Testing regexes', function () {
|
|||||||
|
|
||||||
var regexes;
|
var regexes;
|
||||||
|
|
||||||
// todo: use AST-based instead of grep
|
before('Read main js file', function () {
|
||||||
before('Read main js file', function (done) {
|
var code = fs.readFileSync('src/ua-parser.js', 'utf8').toString();
|
||||||
fs.readFile('src/ua-parser.js', 'utf8', function (err, data) {
|
var ast = parseJS(code, { sourceType: "script" });
|
||||||
regexes = data.match(/(\/.+\/[ig]+)(?=[,\s\n])/g);
|
regexes = [];
|
||||||
done();
|
traverse(ast, {
|
||||||
|
RegExpLiteral: (path) => {
|
||||||
|
regexes.push(path.node.pattern);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (regexes.length === 0) {
|
||||||
|
throw new Error("Regexes cannot be empty!");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Begin testing', function () {
|
describe('Begin testing', function () {
|
||||||
@ -156,4 +165,4 @@ describe('Testing regexes', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user