function escapeHtml(s) {
var amp = /&/g, lt = //g;
return s.toString()
.replace(amp, '&')
.replace(lt, '<')
.replace(gt, '>');
}
function escapeAttr(s) {
return s.toString()
.replace(/'/g, '%22')
.replace(/"/g, '%27');
}
function test() {
var tainted = window.name;
var elt = document.createElement();
elt.innerHTML = "" + escapeHtml(tainted) + ""; // OK
elt.innerHTML = "
" + escapeAttr(tainted) + "
"; // NOT OK, but not flagged - [INCONSISTENCY]
const regex = /[<>'"&]/;
if (regex.test(tainted)) {
elt.innerHTML = '' + tainted + ''; // NOT OK
} else {
elt.innerHTML = '' + tainted + ''; // OK
}
if (!regex.test(tainted)) {
elt.innerHTML = '' + tainted + ''; // OK
} else {
elt.innerHTML = '' + tainted + ''; // NOT OK
}
if (regex.exec(tainted)) {
elt.innerHTML = '' + tainted + ''; // NOT OK
} else {
elt.innerHTML = '' + tainted + ''; // OK
}
if (regex.exec(tainted) != null) {
elt.innerHTML = '' + tainted + ''; // NOT OK
} else {
elt.innerHTML = '' + tainted + ''; // OK
}
if (regex.exec(tainted) == null) {
elt.innerHTML = '' + tainted + ''; // OK
} else {
elt.innerHTML = '' + tainted + ''; // NOT OK
}
elt.innerHTML = tainted.replace(/<\w+/g, ''); // NOT OK
}