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)