Allow negative paramIndex as reversed-order in ParamFlowRule (#549)
* Allow negative paramIndex in ParamFlowRule Signed-off-by: Carpenter Lee <hooleeucas@163.com>
This commit is contained in:
parent
d05a603873
commit
80797ae85e
|
|
@ -52,7 +52,7 @@ final class ParamFlowChecker {
|
|||
}
|
||||
|
||||
// Get parameter value. If value is null, then pass.
|
||||
Object value = args[paramIdx];
|
||||
Object value = valueAt(args, paramIdx);
|
||||
if (value == null) {
|
||||
return true;
|
||||
}
|
||||
|
|
@ -64,6 +64,18 @@ final class ParamFlowChecker {
|
|||
return passLocalCheck(resourceWrapper, rule, count, value);
|
||||
}
|
||||
|
||||
private static Object valueAt(Object[] args, int paramIdx) {
|
||||
Object value = null;
|
||||
if (paramIdx < 0) {
|
||||
if (-paramIdx <= args.length) {
|
||||
return args[args.length + paramIdx];
|
||||
}
|
||||
} else {
|
||||
value = args[paramIdx];
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
private static boolean passLocalCheck(ResourceWrapper resourceWrapper, ParamFlowRule rule, int count,
|
||||
Object value) {
|
||||
try {
|
||||
|
|
@ -112,7 +124,7 @@ final class ParamFlowChecker {
|
|||
int itemThreshold = rule.getParsedHotItems().get(value);
|
||||
return ++threadCount <= itemThreshold;
|
||||
}
|
||||
long threshold = (long) rule.getCount();
|
||||
long threshold = (long)rule.getCount();
|
||||
return ++threadCount <= threshold;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ public final class ParamFlowRuleUtil {
|
|||
|
||||
public static boolean isValidRule(ParamFlowRule rule) {
|
||||
return rule != null && !StringUtil.isBlank(rule.getResource()) && rule.getCount() >= 0
|
||||
&& rule.getGrade() >= 0 && rule.getParamIdx() != null && rule.getParamIdx() >= 0 && checkCluster(rule);
|
||||
&& rule.getGrade() >= 0 && rule.getParamIdx() != null && checkCluster(rule);
|
||||
}
|
||||
|
||||
private static boolean checkCluster(/*@PreChecked*/ ParamFlowRule rule) {
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ public class ParamFlowRuleUtilTest {
|
|||
.setCount(1)
|
||||
.setParamIdx(-1);
|
||||
assertFalse(ParamFlowRuleUtil.isValidRule(rule4));
|
||||
assertFalse(ParamFlowRuleUtil.isValidRule(rule5));
|
||||
assertTrue(ParamFlowRuleUtil.isValidRule(rule5));
|
||||
|
||||
ParamFlowRule goodRule = new ParamFlowRule("abc")
|
||||
.setCount(10)
|
||||
|
|
|
|||
Loading…
Reference in New Issue