Skip to content

Commit 0876e2f

Browse files
Fix possible NPE
1 parent e94dd7b commit 0876e2f

2 files changed

Lines changed: 16 additions & 1 deletion

File tree

server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,12 @@ protected IPAddressVO getSourceIpForIngressRule(Long sourceIpAddressId) {
219219
if (sourceIpAddressId == null) {
220220
return null;
221221
}
222-
return _ipAddressDao.findById(sourceIpAddressId);
222+
IPAddressVO sourceIp = _ipAddressDao.findById(sourceIpAddressId);
223+
if (sourceIp == null) {
224+
throw new CloudRuntimeException("Unable to find IP address by id=" + sourceIpAddressId);
225+
}
226+
227+
return sourceIp;
223228
}
224229

225230
protected FirewallRule createIngressFirewallRuleForIsolatedIp(FirewallRule rule, Account caller, IPAddressVO sourceIp)

server/src/test/java/com/cloud/network/firewall/FirewallManagerTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.cloud.network.NetworkModel;
2828
import com.cloud.network.NetworkRuleApplier;
2929
import com.cloud.network.dao.FirewallRulesDao;
30+
import com.cloud.network.dao.IPAddressDao;
3031
import com.cloud.network.dao.IPAddressVO;
3132
import com.cloud.network.dao.NetworkDao;
3233
import com.cloud.network.dao.NetworkVO;
@@ -43,6 +44,7 @@
4344
import com.cloud.user.AccountManager;
4445
import com.cloud.user.DomainManager;
4546
import com.cloud.utils.component.ComponentContext;
47+
import com.cloud.utils.exception.CloudRuntimeException;
4648
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
4749
import org.apache.cloudstack.network.RoutedIpv4Manager;
4850
import org.junit.After;
@@ -97,6 +99,8 @@ public class FirewallManagerTest {
9799
FirewallRulesDao _firewallDao;
98100
@Mock
99101
NetworkDao _networkDao;
102+
@Mock
103+
IPAddressDao _ipAddressDao;
100104

101105
@Spy
102106
@InjectMocks
@@ -694,4 +698,10 @@ public void testGetSourceIpForIngressRuleReturnsNullWhenIdIsNull() {
694698
IPAddressVO result = _firewallMgr.getSourceIpForIngressRule(null);
695699
Assert.assertNull(result);
696700
}
701+
702+
@Test(expected = CloudRuntimeException.class)
703+
public void testGetSourceIpForIngressRuleReturnsNullWhenIpIsnotPresent() {
704+
when(_ipAddressDao.findById(1L)).thenReturn(null);
705+
_firewallMgr.getSourceIpForIngressRule(1L);
706+
}
697707
}

0 commit comments

Comments
 (0)