# Potential Null-Pointer-Access in Eclipse



## Spacerat (18. Nov 2009)

Was jetzt kommt dürfte vllt. heikel sein...
Folgender Code:
	
	
	
	





```
boolean cull = (tex != null)? tex.getMaterial().isSet(MaterialFlag.FACECULLING) : false;
boolean frnt = cull && tex.getMaterial().isSet(MaterialFlag.CULLFRONT);
```
in der 2. Zeile wird hinter dem [c]&&[/c] ein potentieller Null-Pointer-Zugriff angewarnt. Ich frage mich, warum, denn schliesslich wird [c]cull[/c] ja auf *false* gesetzt und aufgrund von [c]&&[/c] *tex* gar nicht meh abgefragt. Kann da Eclipse nur nicht folgen oder kann der Null-Zugriff wirklich irgendwann (z.B. bei Multi-Threading) passieren?


----------



## SlaterB (18. Nov 2009)

was du alles von so automatischen Tools erwartest..

selbst

```
String tex = null;
        boolean cull = false;
        boolean frnt = cull && tex.toString() != null;
```
ergibt bei mir ne Warning, oder kann das deine Version schon?


----------



## ARadauer (18. Nov 2009)

> Kann da Eclipse nur nicht folgen


vermutlich, also meiner Meinung nach kann hier keine npe passieren.. ich denke eclipse denkt einfach hier nicht so weit...
Schon mal findbugs gefragt?


----------



## Spacerat (18. Nov 2009)

SlaterB hat gesagt.:


> was du alles von so automatischen Tools erwartest..
> 
> selbst
> ...
> ergibt bei mir ne Warning, oder kann das deine Version schon?


Nö... keine Warning... sondern einen Fehler... [c]tex can only be null at this location[/c]. [inronie]Ist ja auch gar nicht so offensichtlich.[/ironie]
Aber möglicherweise ist es ja doch zu viel verlangt, wenn Eclipse solche Lapalien erkennt... naja... Hauptsache der [c]camelCase[/c] stimmt :lol:.
@ARadauer: Nein, dort hab' ich noch nicht gefragt.


----------



## Wildcard (20. Nov 2009)

Spacerat hat gesagt.:


> oder kann der Null-Zugriff wirklich irgendwann (z.B. bei Multi-Threading) passieren?


Klar kann das passieren. 

Hier ist tex != null und cull wird true

```
boolean cull = (tex != null)? tex.getMaterial().isSet(MaterialFlag.FACECULLING) : false;
```
Nun kommt ein zweiter Thread und setzt tex auf null. 

```
boolean frnt = cull && tex.getMaterial().isSet(MaterialFlag.CULLFRONT);
```
cull == true tex==null => NPE


----------



## Spacerat (20. Nov 2009)

Ahso... Das ist hilfreich.
Wenn ich also die Methode synchronisiere, verschwindet auch die Warnung? Ähm... tex ist aber lokal (geht aus dem beispiel nicht hervor...), das bedeutet, die liegt bei einer Unterbrechung auf'm Stack... Hmmm...
Naja... trotzdem Danke.


----------



## Wildcard (20. Nov 2009)

Spacerat hat gesagt.:


> Wenn ich also die Methode synchronisiere, verschwindet auch die Warnung?


Ich glaube du erhoffst dir da zu viel Intelligenz


----------



## Spacerat (20. Nov 2009)

Ja, OK... Hast wohl recht. Ich versuch' das mal einzuschränken.


----------

