Skip to content

Commit d196881

Browse files
wilderrodriguesDaanHoogland
authored andcommitted
Fixing coverity issues related to resource leak on FileInputStream being created anonymously
Signed-off-by: Daan Hoogland <daan@onecht.net>
1 parent 2774b62 commit d196881

5 files changed

Lines changed: 104 additions & 83 deletions

File tree

awsapi/src/com/cloud/bridge/service/EC2RestServlet.java

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import org.apache.axis2.databinding.ADBException;
5959
import org.apache.axis2.databinding.utils.writer.MTOMAwareXMLSerializer;
6060
import org.apache.commons.codec.binary.Base64;
61+
import org.apache.commons.io.IOUtils;
6162
import org.apache.log4j.Logger;
6263
import org.springframework.stereotype.Component;
6364
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
@@ -103,7 +104,6 @@
103104
import com.amazon.ec2.StartInstancesResponse;
104105
import com.amazon.ec2.StopInstancesResponse;
105106
import com.amazon.ec2.TerminateInstancesResponse;
106-
107107
import com.cloud.bridge.model.UserCredentialsVO;
108108
import com.cloud.bridge.persist.dao.CloudStackUserDaoImpl;
109109
import com.cloud.bridge.persist.dao.OfferingDaoImpl;
@@ -203,12 +203,16 @@ public void init(ServletConfig config) throws ServletException {
203203
if (null != propertiesFile) {
204204
logger.info("Use EC2 properties file: " + propertiesFile.getAbsolutePath());
205205
EC2Prop = new Properties();
206+
FileInputStream ec2PropFile = null;
206207
try {
207-
EC2Prop.load(new FileInputStream(propertiesFile));
208+
ec2PropFile = new FileInputStream(propertiesFile);
209+
EC2Prop.load(ec2PropFile);
208210
} catch (FileNotFoundException e) {
209211
logger.warn("Unable to open properties file: " + propertiesFile.getAbsolutePath(), e);
210212
} catch (IOException e) {
211213
logger.warn("Unable to read properties file: " + propertiesFile.getAbsolutePath(), e);
214+
} finally {
215+
IOUtils.closeQuietly(ec2PropFile);
212216
}
213217
String keystore = EC2Prop.getProperty("keystore");
214218
keystorePassword = EC2Prop.getProperty("keystorePass");
@@ -492,7 +496,7 @@ private void setCertificate(HttpServletRequest request, HttpServletResponse resp
492496
response.sendError(530, "Missing cert parameter");
493497
return;
494498
}
495-
// logger.debug( "SetCertificate cert: [" + certificate[0] + "]" );
499+
// logger.debug( "SetCertificate cert: [" + certificate[0] + "]" );
496500

497501
String[] accessKey = request.getParameterValues("AWSAccessKeyId");
498502
if (null == accessKey || 0 == accessKey.length) {
@@ -578,12 +582,12 @@ private void deleteCertificate(HttpServletRequest request, HttpServletResponse r
578582
credentialDao.setCertificateId( accessKey[0], null );
579583
580584
*/txn = TransactionLegacy.open(TransactionLegacy.AWSAPI_DB);
581-
UserCredentialsVO user = ucDao.getByAccessKey(accessKey[0]);
582-
user.setCertUniqueId(null);
583-
ucDao.update(user.getId(), user);
584-
response.setStatus(200);
585-
endResponse(response, "User certificate deleted successfully");
586-
txn.commit();
585+
UserCredentialsVO user = ucDao.getByAccessKey(accessKey[0]);
586+
user.setCertUniqueId(null);
587+
ucDao.update(user.getId(), user);
588+
response.setStatus(200);
589+
endResponse(response, "User certificate deleted successfully");
590+
txn.commit();
587591
} else
588592
response.setStatus(404);
589593

@@ -830,7 +834,7 @@ private void revokeSecurityGroupIngress(HttpServletRequest request, HttpServletR
830834

831835
// -> execute the request
832836
RevokeSecurityGroupIngressResponse EC2response =
833-
EC2SoapServiceImpl.toRevokeSecurityGroupIngressResponse(ServiceProvider.getInstance().getEC2Engine().revokeSecurityGroup(EC2request));
837+
EC2SoapServiceImpl.toRevokeSecurityGroupIngressResponse(ServiceProvider.getInstance().getEC2Engine().revokeSecurityGroup(EC2request));
834838
serializeResponse(response, EC2response);
835839
}
836840

@@ -915,7 +919,7 @@ private void authorizeSecurityGroupIngress(HttpServletRequest request, HttpServl
915919

916920
// -> execute the request
917921
AuthorizeSecurityGroupIngressResponse EC2response =
918-
EC2SoapServiceImpl.toAuthorizeSecurityGroupIngressResponse(ServiceProvider.getInstance().getEC2Engine().authorizeSecurityGroup(EC2request));
922+
EC2SoapServiceImpl.toAuthorizeSecurityGroupIngressResponse(ServiceProvider.getInstance().getEC2Engine().authorizeSecurityGroup(EC2request));
919923
serializeResponse(response, EC2response);
920924
}
921925

@@ -1012,7 +1016,7 @@ private void createSecurityGroup(HttpServletRequest request, HttpServletResponse
10121016

10131017
// -> execute the request
10141018
CreateSecurityGroupResponse EC2response =
1015-
EC2SoapServiceImpl.toCreateSecurityGroupResponse(ServiceProvider.getInstance().getEC2Engine().createSecurityGroup(groupName, groupDescription));
1019+
EC2SoapServiceImpl.toCreateSecurityGroupResponse(ServiceProvider.getInstance().getEC2Engine().createSecurityGroup(groupName, groupDescription));
10161020
serializeResponse(response, EC2response);
10171021
}
10181022

@@ -1028,7 +1032,7 @@ private void deleteSecurityGroup(HttpServletRequest request, HttpServletResponse
10281032

10291033
// -> execute the request
10301034
DeleteSecurityGroupResponse EC2response =
1031-
EC2SoapServiceImpl.toDeleteSecurityGroupResponse(ServiceProvider.getInstance().getEC2Engine().deleteSecurityGroup(groupName));
1035+
EC2SoapServiceImpl.toDeleteSecurityGroupResponse(ServiceProvider.getInstance().getEC2Engine().deleteSecurityGroup(groupName));
10321036
serializeResponse(response, EC2response);
10331037
}
10341038

@@ -1166,7 +1170,7 @@ private void modifyImageAttribute(HttpServletRequest request, HttpServletRespons
11661170

11671171
// -> execute the request
11681172
ModifyImageAttributeResponse EC2response =
1169-
EC2SoapServiceImpl.toModifyImageAttributeResponse(ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute(ec2request));
1173+
EC2SoapServiceImpl.toModifyImageAttributeResponse(ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute(ec2request));
11701174
serializeResponse(response, EC2response);
11711175
}
11721176

@@ -1231,7 +1235,7 @@ private void resetImageAttribute(HttpServletRequest request, HttpServletResponse
12311235

12321236
// -> execute the request
12331237
ResetImageAttributeResponse EC2response =
1234-
EC2SoapServiceImpl.toResetImageAttributeResponse(ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute(ec2request));
1238+
EC2SoapServiceImpl.toResetImageAttributeResponse(ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute(ec2request));
12351239
serializeResponse(response, EC2response);
12361240
}
12371241

@@ -1443,7 +1447,7 @@ private void describeAvailabilityZones(HttpServletRequest request, HttpServletRe
14431447

14441448
// -> execute the request
14451449
DescribeAvailabilityZonesResponse EC2response =
1446-
EC2SoapServiceImpl.toDescribeAvailabilityZonesResponse(ServiceProvider.getInstance().getEC2Engine().describeAvailabilityZones(EC2request));
1450+
EC2SoapServiceImpl.toDescribeAvailabilityZonesResponse(ServiceProvider.getInstance().getEC2Engine().describeAvailabilityZones(EC2request));
14471451
serializeResponse(response, EC2response);
14481452
}
14491453

@@ -1499,7 +1503,7 @@ else if (attribute[0].equalsIgnoreCase("launchPermission"))
14991503
}
15001504

15011505
DescribeImageAttributeResponse EC2response =
1502-
EC2SoapServiceImpl.toDescribeImageAttributeResponse(ServiceProvider.getInstance().getEC2Engine().describeImageAttribute(ec2request));
1506+
EC2SoapServiceImpl.toDescribeImageAttributeResponse(ServiceProvider.getInstance().getEC2Engine().describeImageAttribute(ec2request));
15031507
serializeResponse(response, EC2response);
15041508
}
15051509

@@ -1677,7 +1681,7 @@ private void describeInstanceAttribute(HttpServletRequest request, HttpServletRe
16771681

16781682
// -> execute the request
16791683
DescribeInstanceAttributeResponse EC2response =
1680-
EC2SoapServiceImpl.toDescribeInstanceAttributeResponse(ServiceProvider.getInstance().getEC2Engine().describeInstances(EC2request));
1684+
EC2SoapServiceImpl.toDescribeInstanceAttributeResponse(ServiceProvider.getInstance().getEC2Engine().describeInstances(EC2request));
16811685
serializeResponse(response, EC2response);
16821686
}
16831687

@@ -1707,7 +1711,7 @@ private void modifyInstanceAttribute(HttpServletRequest request, HttpServletResp
17071711

17081712
// -> execute the request
17091713
ModifyInstanceAttributeResponse EC2response =
1710-
EC2SoapServiceImpl.toModifyInstanceAttributeResponse(ServiceProvider.getInstance().getEC2Engine().modifyInstanceAttribute(ec2Request));
1714+
EC2SoapServiceImpl.toModifyInstanceAttributeResponse(ServiceProvider.getInstance().getEC2Engine().modifyInstanceAttribute(ec2Request));
17111715
serializeResponse(response, EC2response);
17121716
}
17131717

@@ -1766,7 +1770,7 @@ private void describeVolumes(HttpServletRequest request, HttpServletResponse res
17661770
// -> execute the request
17671771
EC2Engine engine = ServiceProvider.getInstance().getEC2Engine();
17681772
DescribeVolumesResponse EC2response =
1769-
EC2SoapServiceImpl.toDescribeVolumesResponse(ServiceProvider.getInstance().getEC2Engine().describeVolumes(EC2request), engine);
1773+
EC2SoapServiceImpl.toDescribeVolumesResponse(ServiceProvider.getInstance().getEC2Engine().describeVolumes(EC2request), engine);
17701774
serializeResponse(response, EC2response);
17711775
}
17721776

@@ -1988,7 +1992,7 @@ private void describeTags(HttpServletRequest request, HttpServletResponse respon
19881992
* parameter to see if the signature has expired and if so the request fails.
19891993
*/
19901994
private boolean authenticateRequest(HttpServletRequest request, HttpServletResponse response) throws SignatureException, IOException, InstantiationException,
1991-
IllegalAccessException, ClassNotFoundException, SQLException, ParseException {
1995+
IllegalAccessException, ClassNotFoundException, SQLException, ParseException {
19921996
String cloudSecretKey = null;
19931997
String cloudAccessKey = null;
19941998
String signature = null;

awsapi/src/com/cloud/bridge/service/controller/s3/ServiceProvider.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,14 @@
3434
import javax.inject.Inject;
3535

3636
import org.apache.axis2.AxisFault;
37+
import org.apache.cloudstack.managed.context.ManagedContextTimerTask;
38+
import org.apache.commons.io.IOUtils;
3739
import org.apache.log4j.Logger;
3840
import org.apache.log4j.xml.DOMConfigurator;
3941
import org.springframework.stereotype.Component;
4042

4143
import com.amazon.ec2.AmazonEC2SkeletonInterface;
4244
import com.amazon.s3.AmazonS3SkeletonInterface;
43-
44-
import org.apache.cloudstack.managed.context.ManagedContextTimerTask;
45-
4645
import com.cloud.bridge.model.MHostVO;
4746
import com.cloud.bridge.model.SHost;
4847
import com.cloud.bridge.model.SHostVO;
@@ -111,8 +110,8 @@ void initComponent() {
111110
instance = this;
112111
}
113112

113+
@Override
114114
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
115-
116115
initialize();
117116
return true;
118117
}
@@ -122,7 +121,7 @@ public long getManagementHostId() {
122121
long mhostId = 0;
123122
if (mhost != null)
124123
mhostId = mhost.getId() != null ? mhost.getId().longValue() : 0L;
125-
return mhostId;
124+
return mhostId;
126125
}
127126

128127
/**
@@ -268,12 +267,16 @@ private void loadStartupProperties() {
268267
File propertiesFile = ConfigurationHelper.findConfigurationFile("cloud-bridge.properties");
269268
properties = new Properties();
270269
if (propertiesFile != null) {
270+
FileInputStream startProps = null;
271271
try {
272-
properties.load(new FileInputStream(propertiesFile));
272+
startProps = new FileInputStream(propertiesFile);
273+
properties.load(startProps);
273274
} catch (FileNotFoundException e) {
274275
logger.warn("Unable to open properties file: " + propertiesFile.getAbsolutePath(), e);
275276
} catch (IOException e) {
276277
logger.warn("Unable to read properties file: " + propertiesFile.getAbsolutePath(), e);
278+
} finally {
279+
IOUtils.closeQuietly(startProps);
277280
}
278281

279282
logger.info("Use startup properties file: " + propertiesFile.getAbsolutePath());

0 commit comments

Comments
 (0)