From 7052ce5aefefffbf8745a3ac13040448196b4b6c Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Tue, 18 Feb 2020 19:35:37 +0000 Subject: fix corner case in `evaluate` (#3728) - augment `ufuzz` for further `RegExp` testing --- test/compress/regexp.js | 168 ++++++++++++++++++++++++++++++++++++++++++++++++ test/ufuzz/index.js | 2 + 2 files changed, 170 insertions(+) (limited to 'test') diff --git a/test/compress/regexp.js b/test/compress/regexp.js index defc0079..e8b2da73 100644 --- a/test/compress/regexp.js +++ b/test/compress/regexp.js @@ -255,3 +255,171 @@ issue_3434_4: { "false true", ] } + +exec: { + options = { + evaluate: true, + loops: true, + unsafe: true, + } + input: { + while (/a/.exec("AAA")) + console.log("FAIL"); + console.log("PASS"); + } + expect: { + for (;null;) + console.log("FAIL"); + console.log("PASS"); + } + expect_stdout: "PASS" +} + +exec_global: { + options = { + evaluate: true, + loops: true, + unsafe: true, + } + input: { + while (/a/g.exec("AAA")) + console.log("FAIL"); + console.log("PASS"); + } + expect: { + for (;null;) + console.log("FAIL"); + console.log("PASS"); + } + expect_stdout: "PASS" +} + +test: { + options = { + evaluate: true, + unsafe: true, + } + input: { + while (/a/.test("AAA")) + console.log("FAIL"); + console.log("PASS"); + } + expect: { + while (false) + console.log("FAIL"); + console.log("PASS"); + } + expect_stdout: "PASS" +} + +test_global: { + options = { + evaluate: true, + unsafe: true, + } + input: { + while (/a/g.test("AAA")) + console.log("FAIL"); + console.log("PASS"); + } + expect: { + while (false) + console.log("FAIL"); + console.log("PASS"); + } + expect_stdout: "PASS" +} + +var_exec: { + options = { + evaluate: true, + loops: true, + reduce_vars: true, + toplevel: true, + unsafe: true, + } + input: { + var r = /a/; + while (r.exec("AAA")) + console.log("FAIL"); + console.log("PASS"); + } + expect: { + var r = /a/; + for (;null;) + console.log("FAIL"); + console.log("PASS"); + } + expect_stdout: "PASS" +} + +var_exec_global: { + options = { + evaluate: true, + loops: true, + reduce_vars: true, + toplevel: true, + unsafe: true, + } + input: { + var r = /a/g; + while (r.exec("aaa")) + console.log("PASS"); + } + expect: { + var r = /a/g; + for (;r.exec("aaa");) + console.log("PASS"); + } + expect_stdout: [ + "PASS", + "PASS", + "PASS", + ] +} + +var_test: { + options = { + evaluate: true, + reduce_vars: true, + toplevel: true, + unsafe: true, + } + input: { + var r = /a/; + while (r.test("AAA")) + console.log("FAIL"); + console.log("PASS"); + } + expect: { + var r = /a/; + while (false) + console.log("FAIL"); + console.log("PASS"); + } + expect_stdout: "PASS" +} + +var_test_global: { + options = { + evaluate: true, + reduce_vars: true, + toplevel: true, + unsafe: true, + } + input: { + var r = /a/g; + while (r.test("aaa")) + console.log("PASS"); + } + expect: { + var r = /a/g; + while (r.test("aaa")) + console.log("PASS"); + } + expect_stdout: [ + "PASS", + "PASS", + "PASS", + ] +} diff --git a/test/ufuzz/index.js b/test/ufuzz/index.js index 7032fc3c..2083a90e 100644 --- a/test/ufuzz/index.js +++ b/test/ufuzz/index.js @@ -742,6 +742,8 @@ function _createExpression(recurmax, noComma, stmtDepth, canThrow) { return " ((" + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + ") || a || 3).toString() "; case p++: return " /[abc4]/.test(((" + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + ") || b || 5).toString()) "; + case p++: + return " /[abc4]/g.exec(((" + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + ") || b || 5).toString()) "; case p++: return " ((" + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + ") || " + rng(10) + ").toString()[" + -- cgit v1.2.3