2017-08-09 21 views
5

ソナールールsquid:S2384は、このコードに問題を提起:なぜthis.variableに脆弱性はありませんか?

public Date getCreatedOn() { 
    return createdOn; 
} 

私たちは、元のを返すべきではないことを理解し、ルールMutable members should not be stored or returned directly

以下、代わりに私たちはオブジェクトのコピーを返す必要があります。

一方、ソナーは、このコードに問題を提起しません。このコードは違う

public Date getCreatedOn() { 
    return this.createdOn; 
} 

何?

2番目のケースで元のコピーを返さないのですか?

+4

がidenitcal –

+0

ように見える彼らは同じですが、ソナーは、第一1が脆弱しかし – Vamsidhar

+0

秒されていないか、それは、それはソナーの制限、またはソナーソナーのバグだと言います「これは私が本当にこれをすることを意味したので、私に警告しない」という言い方です。 –

答えて

9

これはSonarJava(SonarQubeプラットフォームで使用されるJavaスタティックコードアナライザ)がこの問題を検出する方法の欠点です。 thisを使用してフィールドが返されるケースをカバーするために、実装を改善するチケットを作成しました。

あなたは二つの文を掲載しているコードに基づいてhttps://jira.sonarsource.com/browse/SONARJAVA-2424

-2

あなたが共有しているコードは同じです。あなたが共有しているリンクは異なっています。

クラスに参照型のデータメンバがあり、それが変更可能で、直接返すときは同じオブジェクトを参照しているため、変更することができます。オブジェクトの値を別のオブジェクトで返すほうがよいでしょう。

+3

これは質問に答えません。OPはなぜ「this」を追加すると違いがあるのか​​を尋ねています。 –

関連する問題