What is the meaning of Possible null pointer dereference in findbug?
Solution 1
It says here
NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH)
There is a branch of statement that, if executed, guarantees that a null value will be dereferenced, which would generate a NullPointerException when the code is executed. Of course, the problem might be that the branch or statement is infeasible and that the null pointer exception can't ever be executed; deciding that is beyond the ability of FindBugs.
If you would have posted some code it would be easier to answer.
EDIT I don't see a lot of documentation but here is one example! Hope this helps!
Solution 2
a sample code is something like this.
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.
Solution 3
Okay
This is two simple Examples : First one gives a : Possible null pointer dereference
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 ?
Solution 4
In simple language, if a variable value is assigned as null, and you try to access it with any inbuilt method like add/get. Then null pointer dereference issue comes with SONAR. Because there are changes for it go null, and throw null pointer exception. Try to avoid it if possible.
For example:
File file=null;
file.getName();
will throw "Possible null pointer dereference"
It may not happen directly as mentioned in the example, it can be unintentionally.
Solution 5
I got this issue with the following piece of code:-
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();
}
Here, the br
BufferedReader can be null
in br.close()
. However it can only be null
if new BufferedReader()
fails, in which case we are throwing the relevant exceptions.
This is thus a false warning. Findbugs
docs mention the same:-
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.
Saeed Zarinfam
I enjoy learning new things. A late bloomer, football lover, lazy blogger, very amateur photographer, and old software creator. (https://zarinfam.medium.com/)
Updated on July 05, 2022Comments
-
Saeed Zarinfam almost 2 years
I am using Sonar and I have got this kind of violation from it for a peace of my code:
Correctness - Possible null pointer dereference
Has anyone know about this rule in findbugs? I searched a lot but I can not find a good sample code (in Java) which describe this rule, unfortunately findbugs site did not have any sample code or good description about this rule.
Why does this violation appear?
-
Saeed Zarinfam over 11 yearsMy code is very complicated and also i changed my code and it fixed but i did not understand this findbugs rule.
-
Bharat Sinha over 11 yearsWell than as it says
There is a branch of statement that, if executed, guarantees that a null value will be dereferenced, which would generate a NullPointerException when the code is executed.
means you potentially are assigning anull
to a variable and using it again which might cause an exception. -
Saeed Zarinfam over 11 yearsPlease give me a sample code. I read this description before !
-
Saeed Zarinfam over 11 yearsThank you for your useful link.
-
Koos Gadellaa almost 6 years... and since you're using a finally block, you're guaranteeing that, after the exception from the bufferedreader is caught and (probably) rethrown, a nullpointer occurs...