web-dev-qa-db-ja.com

findbugsで起こり得るnullポインター逆参照の意味は何ですか?

私はソナーを使用していますが、コードの平和のためにソナーから次のような違反がありました。

 Correctness - Possible null pointer dereference  

Findbugsでこのルールを知っている人はいますか?私はたくさん検索しましたが、このルールを説明する適切なサンプルコード(Java)が見つかりません。残念ながら、findbugsサイトには、このルールに関するサンプルコードや適切な説明がありませんでした。

この違反が表示されるのはなぜですか?

15
Saeed Zarinfam

それは言う ここ

NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH)

ステートメントの分岐があり、実行された場合、null値が逆参照されることが保証され、コードの実行時にNullPointerExceptionが生成されます。もちろん、問題はブランチまたはステートメントが実行不可能であり、nullポインター例外が実行できないことです。それを決定することはFindBugsの能力を超えています。

コードを投稿した方が答えが簡単になります。

[〜#〜] edit [〜#〜]多くのドキュメントは表示されませんが、ここに1つあります !お役に立てれば!

17
SiB

サンプルコードはこのようなものです。

String s = null ;
if (today is monday){
    s = "Monday" ;
else if (today is tuesday){
    s = "Tuesday" ;
}
System.out.println(s.length()); //Will throw a null pointer if today is not monday or tuesday.
12
Balaji Natesan

はい

これは2つの単純な例です。最初の例では、次のようになります。

1. Error
     ArrayList a = null;
     a.add(j, PointSet.get(j));
     // now i'm trying to add to the ArrayList 
     // because i'm giving it null it gives me the "Possible null pointer dereference"

2. No Error
     ArrayList a = new ArrayList<>();
     a.add(j, PointSet.get(j));
     // adding elements to the ArrayList
     // no problem

シンプルですか?

3
ucefkh

次のコードでこの問題が発生しました:-

_BufferedReader br = null;
    String queryTemplate = null;
    try {
        br = new BufferedReader(new FileReader(queryFile));
        queryTemplate = br.readLine();
    } catch (FileNotFoundException e) {
      //  throw exception
    } catch (IOException e) {
       // throw exception
    } finally {
        br.close();
    }
_

ここで、br BufferedReaderはbr.close()nullにすることができます。ただし、new BufferedReader()が失敗した場合にのみnullになります。この場合、関連する例外がスローされます。

したがって、これは誤った警告です。 Findbugs docs同じことについて言及します:-

_   This may lead to a NullPointerException when the code is executed.  
   Note that because FindBugs currently does not Prune infeasible 
   exception paths, this may be a false warning.
_
1
Sanchay

単純な言語で、変数値がnullとして割り当てられており、add/getなどの組み込みメソッドでその値にアクセスしようとした場合。次に、SONARでnullポインター逆参照の問題が発生します。変更があるため、nullになり、nullポインタ例外がスローされます。可能であればそれを避けてください。

Exファイルfile = null; file.getName(); 「可能なnullポインター逆参照」をスローします

例で述べたように、直接発生することはありませんが、意図せずに発生する可能性があります。

1
Jyoti Pandey