Java 的 SonarQube:确保在此处安全使用命令行参数
SonarQube for Java: Make sure that command line arguments are used safely here
Java 的 SonarQube 抱怨:“确保在此处安全使用命令行参数”以下代码:
public class Test {
public static void main(String[] args) {
try {
System.out.print(returnSum(args));
} catch (NumberFormatException nfe) {
System.out.println("main: Input argument should be a number");
}
}
public static int returnSum(String[] args) {
int sum = 0;
if (args.length > 0) {
try {
for (String arg : args)
sum += Integer.parseInt(arg);
} catch (NumberFormatException nfe) {
System.out.println("returnSum: Input argument should be a number");
throw nfe;
}
}
return sum;
}
}
为了满足 SonarQube 的要求,我还缺少什么?
这似乎是 sonarqube being overly zealous 的情况。它不希望您按原样将命令行参数数组传递给另一个方法。相反,它认为您应该在 main
方法中清理它们。
一种方法是在 main 方法中将字符串转换为整数,然后使用生成的数字数组是“安全的”:
int[] numbers = new int[args.length];
for (int i = 0; i < args.length; i++) {
numbers[i] = Integer.parseInt(args[i]);
}
System.out.print(returnSum(numbers));
Java 的 SonarQube 抱怨:“确保在此处安全使用命令行参数”以下代码:
public class Test {
public static void main(String[] args) {
try {
System.out.print(returnSum(args));
} catch (NumberFormatException nfe) {
System.out.println("main: Input argument should be a number");
}
}
public static int returnSum(String[] args) {
int sum = 0;
if (args.length > 0) {
try {
for (String arg : args)
sum += Integer.parseInt(arg);
} catch (NumberFormatException nfe) {
System.out.println("returnSum: Input argument should be a number");
throw nfe;
}
}
return sum;
}
}
为了满足 SonarQube 的要求,我还缺少什么?
这似乎是 sonarqube being overly zealous 的情况。它不希望您按原样将命令行参数数组传递给另一个方法。相反,它认为您应该在 main
方法中清理它们。
一种方法是在 main 方法中将字符串转换为整数,然后使用生成的数字数组是“安全的”:
int[] numbers = new int[args.length];
for (int i = 0; i < args.length; i++) {
numbers[i] = Integer.parseInt(args[i]);
}
System.out.print(returnSum(numbers));