【发布时间】:2021-09-27 06:26:59
【问题描述】:
我正在分析 Javascript 中函数的参数/参数,它们要么被 JS 库污染,要么未被污染。我把它分为三个场景。第一个是如果所有参数/参数都被污染,那么结果将是真的。其次,如果所有参数都未受污染,那么结果将是错误的。第三种情况是当一些论点被污染而一些未被污染时,我想忽略这种情况。对于前两个场景,我编写了以下几行代码。如果有人可以帮助我解决第三种情况。
function Shadow(x) {
this.val = x;
}
Shadow.getVal = function(v) {
return Shadow.isShadowed(v) ? v.val : v;
}
Shadow.isShadowed = function(x) {
return x instanceof Shadow;
}
function Taint() {
this._taintStack = [];
this.invokeFunPre = function (iid, f, base, args) {
let isTainted = false;
let n_args = [];
for(let i = 0; i < args.length; i++) {
if (Shadow.isShadowed(args[i])) {
n_args.push(Shadow.getVal(args[i]));
isTainted = true;
} else {
n_args.push(args[i]);
}
}
this._taintStack.push(isTainted);
return {f: f, base: base, args: n_args, skip: false};
};
【问题讨论】:
-
循环之后,比较参数的数量和污染的数量。如果受污染的数量不是 0 或参数的数量,那么有些是受污染的,有些不是。
标签: javascript for-loop if-statement