CLOUDSTACK-1131

[EC2 Query API] RunInstances allows negative values for paramters 'MinCount' 
and 'MaxCount'
Add parameter validation to ensure MinCount is greater than 0 and MaxCount is 
great than or equal to MinCount


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/b45d63fe
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/b45d63fe
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/b45d63fe

Branch: refs/heads/4.1
Commit: b45d63feeda41b018a56d8ffc278a357f9c7b95b
Parents: e5bb55c
Author: Likitha Shetty <[email protected]>
Authored: Tue Feb 12 14:01:01 2013 -0800
Committer: Prachi Damle <[email protected]>
Committed: Tue Feb 12 15:08:29 2013 -0800

----------------------------------------------------------------------
 .../com/cloud/bridge/service/EC2RestServlet.java   |   24 +++++++++++----
 .../cloud/bridge/service/EC2SoapServiceImpl.java   |   13 +++++++-
 2 files changed, 29 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b45d63fe/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java 
b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java
index b5296a4..fe93038 100644
--- a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java
+++ b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java
@@ -1142,14 +1142,26 @@ public class EC2RestServlet extends HttpServlet {
         else { response.sendError(530, "Missing ImageId parameter" ); return; }
 
         String[] minCount = request.getParameterValues( "MinCount" );
-        if ( null != minCount && 0 < minCount.length ) 
-            EC2request.setMinCount( Integer.parseInt( minCount[0] ));
-        else { response.sendError(530, "Missing MinCount parameter" ); return; 
}
+        if ( minCount == null || minCount.length < 1) {
+            response.sendError(530, "Missing MinCount parameter" );
+            return;
+        } else if ( Integer.parseInt(minCount[0]) < 1) {
+            throw new EC2ServiceException(ClientError.InvalidParameterValue,
+                    "Value of parameter MinCount should be greater than 0");
+        } else {
+            EC2request.setMinCount( Integer.parseInt( minCount[0]) );
+        }
 
         String[] maxCount = request.getParameterValues( "MaxCount" );
-        if ( null != maxCount && 0 < maxCount.length ) 
-            EC2request.setMaxCount( Integer.parseInt( maxCount[0] ));
-        else { response.sendError(530, "Missing MaxCount parameter" ); return; 
}
+        if ( maxCount == null || maxCount.length < 1) {
+            response.sendError(530, "Missing MaxCount parameter" );
+            return;
+        } else if ( Integer.parseInt(maxCount[0]) < 1) {
+            throw new EC2ServiceException(ClientError.InvalidParameterValue,
+                    "Value of parameter MaxCount should be greater than 0");
+        } else {
+            EC2request.setMaxCount( Integer.parseInt( maxCount[0]) );
+        }
 
         String[] instanceType = request.getParameterValues( "InstanceType" );
         if ( null != instanceType && 0 < instanceType.length ) 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b45d63fe/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java 
b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java
index 2fefb28..4e9445e 100644
--- a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java
+++ b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java
@@ -731,8 +731,17 @@ public class EC2SoapServiceImpl implements 
AmazonEC2SkeletonInterface  {
                EC2RunInstances request = new EC2RunInstances();
                
                request.setTemplateId(rit.getImageId());
-               request.setMinCount(rit.getMinCount());
-               request.setMaxCount(rit.getMaxCount());
+
+        if (rit.getMinCount() < 1) {
+            throw new EC2ServiceException(ClientError.InvalidParameterValue,
+                    "Value of parameter MinCount should be greater than 0");
+        } else request.setMinCount( rit.getMinCount() );
+
+        if (rit.getMaxCount() < 1) {
+            throw new EC2ServiceException(ClientError.InvalidParameterValue,
+                    "Value of parameter MaxCount should be greater than 0");
+        } else request.setMaxCount(rit.getMaxCount());
+
                if (null != type) request.setInstanceType(type);
                if (null != prt) request.setZoneName(prt.getAvailabilityZone());
                if (null != userData) request.setUserData(userData.getData());

Reply via email to