suppress false positives in ufuzz (#5467)

This commit is contained in:
Alex Lam S.L
2022-05-24 23:35:59 +01:00
committed by GitHub
parent c82fc1ef71
commit a1cff23377

View File

@@ -2332,6 +2332,10 @@ function is_error_recursion(ex) {
return ex.name == "RangeError" && /Invalid string length|Maximum call stack size exceeded/.test(ex.message);
}
function is_error_set_property(ex) {
return ex.name == "TypeError" && /^Cannot set propert[\s\S]+? of (null|undefined)/.test(ex.message);
}
function is_error_redeclaration(ex) {
return ex.name == "SyntaxError" && /already been declared|redeclaration/.test(ex.message);
}
@@ -2351,6 +2355,7 @@ function is_error_getter_only_property(ex) {
}
function patch_try_catch(orig, toplevel) {
var patches = [];
var stack = [ {
code: orig,
index: 0,
@@ -2401,26 +2406,33 @@ function patch_try_catch(orig, toplevel) {
code = new_code;
} else if (is_error_in(result)) {
index = result.ufuzz_catch;
return orig.slice(0, index) + result.ufuzz_var + ' = new Error("invalid `in`");' + orig.slice(index);
patches.unshift([ index, result.ufuzz_var + ' = new Error("invalid `in`");' ]);
} else if (is_error_spread(result)) {
index = result.ufuzz_catch;
return orig.slice(0, index) + result.ufuzz_var + ' = new Error("spread not iterable");' + orig.slice(index);
patches.unshift([ index, result.ufuzz_var + ' = new Error("spread not iterable");' ]);
} else if (is_error_recursion(result)) {
index = result.ufuzz_try;
return orig.slice(0, index) + 'throw new Error("skipping infinite recursion");' + orig.slice(index);
patches.unshift([ index, 'throw new Error("skipping infinite recursion");' ]);
} else if (is_error_set_property(result)) {
index = result.ufuzz_catch;
patches.unshift([ index, result.ufuzz_var + ' = new Error("cannot set property");' ]);
} else if (is_error_destructuring(result)) {
index = result.ufuzz_catch;
return orig.slice(0, index) + result.ufuzz_var + ' = new Error("cannot destructure");' + orig.slice(index);
patches.unshift([ index, result.ufuzz_var + ' = new Error("cannot destructure");' ]);
} else if (is_error_class_constructor(result)) {
index = result.ufuzz_catch;
return orig.slice(0, index) + result.ufuzz_var + ' = new Error("missing new for class");' + orig.slice(index);
patches.unshift([ index, result.ufuzz_var + ' = new Error("missing new for class");' ]);
} else if (is_error_getter_only_property(result)) {
index = result.ufuzz_catch;
return orig.slice(0, index) + result.ufuzz_var + ' = new Error("setting getter-only property");' + orig.slice(index);
patches.unshift([ index, result.ufuzz_var + ' = new Error("setting getter-only property");' ]);
}
}
stack.filled = true;
}
if (patches.length) return patches.reduce(function(code, patch) {
var index = patch[0];
return code.slice(0, index) + patch[1] + code.slice(index);
}, orig);
}
var beautify_options = {