From 27bdcbbd831b9dc742058916b2a7b2d523afac68 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Mon, 25 May 2020 15:54:57 +0100 Subject: [PATCH] fix corner cases in infinite recursion detection (#3924) --- test/ufuzz/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/ufuzz/index.js b/test/ufuzz/index.js index ed687def..df946c99 100644 --- a/test/ufuzz/index.js +++ b/test/ufuzz/index.js @@ -1177,19 +1177,19 @@ function skip_infinite_recursion(orig, toplevel) { var code = orig; var tries = []; var offset = 0; - var re = /(?:(?:^|[\s{};])try|}\s*catch\s*\(([^)]+)\)|}\s*finally)\s*(?={)/g; + var re = /(?:(?:^|[\s{});])try|}\s*catch\s*\(([^)]+)\)|}\s*finally)\s*(?={)/g; var match; while (match = re.exec(code)) { if (/}\s*finally\s*$/.test(match[0])) { tries.shift(); continue; } - if (tries.length && tries[0].catch) tries.shift(); var index = match.index + match[0].length + 1; - if (/(?:^|[\s{};])try\s*$/.test(match[0])) { + if (/(?:^|[\s{});])try\s*$/.test(match[0])) { tries.unshift({ try: index - offset }); continue; } + while (tries.length && tries[0].catch) tries.shift(); tries[0].catch = index; var insert = "throw " + match[1] + ".ufuzz_skip || (" + match[1] + ".ufuzz_skip = " + tries[0].try + "), " + match[1] + ";"; var new_code = code.slice(0, index) + insert + code.slice(index); -- 2.34.1