From e13819158013a929f50a6add0b6347c8b7187db7 Mon Sep 17 00:00:00 2001 From: mmmsssttt404 <931121963@qq.com> Date: Tue, 1 Apr 2025 14:42:35 +0800 Subject: [PATCH 1/3] Create redos.mocha.js --- test/interface/redos.mocha.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 test/interface/redos.mocha.js diff --git a/test/interface/redos.mocha.js b/test/interface/redos.mocha.js new file mode 100644 index 000000000..b4621c910 --- /dev/null +++ b/test/interface/redos.mocha.js @@ -0,0 +1,33 @@ +process.chdir(__dirname) + +const config = require('../../lib/tools/Config') +const { performance } = require('perf_hooks') +let expect; +before(async () => { + const chai = await import('chai') + expect = chai.expect +}) + + +describe('ReDos Test', function () { + it('should done in 1 s', function () { + // 构造 schema,期望值为数组或者字符串 + const schemaEntry = { + type: ['array', 'string'] + } + // 构造测试用的长字符串 + const value = "a".repeat(100000) + "=" + + const startTime = performance.now() + const result = config._valid('dummyKey', value, schemaEntry) + const endTime = performance.now() + const timeTaken = endTime - startTime + + // 输出匹配结果和耗时(调试用) + console.log(`Time taken: ${timeTaken.toFixed(3)} ms`) + + + // 并断言耗时在合理范围内(比如小于1000毫秒) + expect(timeTaken).to.be.lessThan(1000) + }) +}) From fddffdb042794c51456b39a8f3a8a5a049eb1d0e Mon Sep 17 00:00:00 2001 From: mmmsssttt404 <931121963@qq.com> Date: Tue, 1 Apr 2025 14:43:13 +0800 Subject: [PATCH 2/3] Update unit.sh --- test/unit.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/unit.sh b/test/unit.sh index 127b4b277..99b231aff 100644 --- a/test/unit.sh +++ b/test/unit.sh @@ -100,5 +100,7 @@ runUnitTest $D/bus.spec.mocha.js runUnitTest $D/bus.fork.spec.mocha.js runUnitTest $D/utility.mocha.js +runUnitTest $D/redos.mocha.js + echo "============== unit test finished ==============" cat unit_time From d0e7801184bcf98b7c93ffecc77c623df6ffa22f Mon Sep 17 00:00:00 2001 From: mmmsssttt404 <931121963@qq.com> Date: Tue, 1 Apr 2025 14:44:13 +0800 Subject: [PATCH 3/3] Update Config.js --- lib/tools/Config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tools/Config.js b/lib/tools/Config.js index 952e74076..98876adab 100644 --- a/lib/tools/Config.js +++ b/lib/tools/Config.js @@ -201,7 +201,7 @@ Config._valid = function(key, value, sch){ if(scht.length > 1 && type != scht[0] && type == '[object String]'){ if(scht[0] == '[object Array]') { // unfortunately, js does not support lookahead RegExp (/(?