【问题标题】:Security - Array is stored directly安全性 - 数组直接存储
【发布时间】:2013-05-30 00:12:58
【问题描述】:

我什至提到了:Sonar Violation: Security - Array is stored directly

我的代码是--->

    public final void setSelectedObjectsList(final ScheduleDTO[] selectedObjectsList) 
               //      Security - Array is stored directly    
               //The user-supplied array 'selectedObjectsList' is stored directly.      
{
            if (selectedObjectsList != null) {
                this.selectedObjectsList = selectedObjectsList.clone();
            } else {
                this.selectedObjectsList = null;
            }
        }

这已经在处理防御副本了,为什么声纳在函数参数处对我大喊大叫。

这不是重复的 Sonar Violation: Security - Array is stored directly

再次感谢您的帮助和时间。

【问题讨论】:

  • 你能发布selectedObjectsList.clone()在做什么吗?
  • @Farlan:selectedObjectsList 是一个 Java 数组。它克隆了数组。

标签: java sonarqube findbugs


【解决方案1】:

不确定 Sonar 在想什么,但使用 clone() 进行防御性浅拷贝应该适用于数组,Arrays.copyOfSystem.arrayCopy() 也是如此。

另一方面,由于您已经将数组称为列表:selectedObjectsList,因此您也可以将其设为实际列表并进行一些重构:

public final void setSelectedSchedules(List<ScheduleDTO> selectedSchedules) {
    this.selectedSchedules = selectedSchedules != null ? new ArrayList<ScheduleDTO>(selectedSchedules) : null;
}

【讨论】:

  • +1。当您使用它时,使用空数组或列表是一种不好的做法。这些永远不应该为空。空的,是的。空,没有。
猜你喜欢
  • 2014-06-16
  • 2014-07-25
  • 2012-07-19
  • 2015-05-10
  • 2021-02-09
  • 2013-01-04
  • 2017-04-12
  • 1970-01-01
相关资源
最近更新 更多