web-dev-qa-db-fra.com

Quelle est la signification de déréférence de pointeur null possible dans findbug?

J'utilise Sonar et j'ai obtenu ce genre de violation pour une tranquillité d'esprit dans mon code:

 Correctness - Possible null pointer dereference  

Quelqu'un at-il connaissance de cette règle dans findbugs? J'ai cherché beaucoup mais je ne trouve pas un bon exemple de code (en Java) décrivant cette règle. Malheureusement, le site findbugs ne contenait aucun exemple de code ni aucune bonne description de cette règle. 

Pourquoi cette violation apparaît-elle?

12
Saeed Zarinfam

Il dit ici

NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH)

Il existe une branche d'instruction qui, si elle est exécutée, garantit qu'une valeur nulle sera déréférencée, ce qui générerait une exception NullPointerException lors de l'exécution du code. Naturellement, le problème peut être que la branche ou l'instruction est infaisable et L'exception de pointeur null ne peut jamais être exécutée, ce qui dépasse les capacités de FindBugs. 

Si vous aviez posté du code, il serait plus facile de répondre. 

EDIT Je ne vois pas beaucoup de documentation, mais voici un exemple ! J'espère que cela t'aides!

17
SiB

un exemple de code est quelque chose comme ça.

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

D'accord 

Voici deux exemples simples: Le premier donne un: Déréférence de pointeur null possible 

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

Simple?

3
ucefkh

J'ai eu ce problème avec le code suivant: - 

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();
    }

Ici, br BufferedReader peut être null dans br.close(). Cependant, il ne peut s'agir que de null si new BufferedReader() échoue, auquel cas nous lançons les exceptions pertinentes.

C'est donc un faux avertissement. Les documents Findbugs mentionnent le même: -

   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

En langage simple, si une valeur de variable est affectée à la valeur null et que vous essayez d'y accéder avec une méthode intégrée telle que add/get. Ensuite, la question de déréférencement du pointeur null vient avec SONAR. Parce qu'il y a des modifications pour cela, il devient nul et lève une exception pointeur null. Essayez de l'éviter si possible.

Fichier ex Fichier = null; file.getName (); jettera "Déréférence de pointeur null possible"

Cela peut ne pas arriver directement comme mentionné dans l'exemple, cela peut être involontaire.

1
Jyoti Pandey