lujie created CLOUDSTACK-10356:
----------------------------------
Summary: Fix Some Potential NPE
Key: CLOUDSTACK-10356
URL: https://issues.apache.org/jira/browse/CLOUDSTACK-10356
Project: CloudStack
Issue Type: Bug
Security Level: Public (Anyone can view this level - this is the default.)
Affects Versions: 4.12.0.0
Reporter: lujie
We have developed a static analysis tool to
[NPEDetector|https://github.com/lujiefsi/NPEDetector] to find some potential
NPE. Our analysis shows that some callees may return null in corner case(e.g.
node crash , IO exception), some of their callers have !=null check but some do
not have. In this issue we post a patch which can add _!=null_ checker based
on existed _!=null_ check. For example:
Callee GlobalLoadBalancingRulesServiceImpl#lookupGslbServiceProvider:
{code:java}
protected GslbServiceProvider lookupGslbServiceProvider() {
return _gslbProviders.size() == 0 ? null : _gslbProviders.get(0);// may
return null;
}
{code}
Caller GlobalLoadBalancingRulesServiceImpl#checkGslbServiceEnabledInZone have
_!=null_:
{code:java}
private boolean checkGslbServiceEnabledInZone(long zoneId, long
physicalNetworkId) {
GslbServiceProvider gslbProvider = lookupGslbServiceProvider();
if (gslbProvider == null) {
throw new CloudRuntimeException("No GSLB provider is available");
}
return gslbProvider.isServiceEnabledInZone(zoneId, physicalNetworkId);
}
{code}
but another
GlobalLoadBalancingRulesServiceImpl#applyGlobalLoadBalancerRuleConfig does not
have !=null check:
{code:java}
GslbServiceProvider gslbProvider = lookupGslbServiceProvider();
siteLb.setGslbProviderPublicIp(gslbProvider.getZoneGslbProviderPublicIp(dataCenterId,
physicalNetworkId));
.........{code}
So we will add below code in non-(null!=null) caller
GlobalLoadBalancingRulesServiceImpl#applyGlobalLoadBalancerRuleConfig
{code:java}
if (gslbProvider == null) {
throw new CloudRuntimeException("No GSLB provider is available");
}
{code}
But due to we are not very familiar with CLOUDSTACK, hope some expert can
review it.
Thanks!!!!
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)