【问题标题】:SonarQube for Java: Make sure that command line arguments are used safely hereSonarQube for Java:确保在此处安全使用命令行参数
【发布时间】:2020-11-08 04:24:09
【问题描述】:

SonarQube for Java 在以下代码中抱怨:“确保在此处安全使用命令行参数”:

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 的要求,我还缺少什么?

【问题讨论】:

    标签: java sonarqube


    【解决方案1】:

    这似乎是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));
    

    【讨论】:

    • 非常感谢您的及时帮助,Joni!不幸的是,您的建议无助于消除 SonarQube 的警告 :( 另外,我故意提取了 returnSum 方法以进行正确的单元测试 - 所以这种方法是故意实施的。
    猜你喜欢
    • 2021-04-29
    • 2011-06-30
    • 2020-01-08
    • 2011-02-02
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    相关资源
    最近更新 更多