Program: 14128
Project: 14128
Buggy source:
private static Parameter parseParameter(String parameterName,JsonNode parameterJsonNode,Map<String,String> userParameterMap) throws CloudFormationException {
  validateParameterKeys(parameterJsonNode);
  ParameterType actualParameterType=parseType(parameterJsonNode);
  ParameterType parsedIndividualType=null;
  boolean isList=false;
switch (actualParameterType) {
case String:
case AWS_EC2_KeyPair_KeyName:
case AWS_EC2_SecurityGroup_Id:
case AWS_EC2_Subnet_Id:
    parsedIndividualType=ParameterType.String;
  isList=false;
break;
case Number:
parsedIndividualType=ParameterType.Number;
isList=false;
break;
case List_Number:
parsedIndividualType=ParameterType.Number;
isList=true;
break;
case List_String:
case List_AWS_EC2_KeyPair_KeyName:
case List_AWS_EC2_SecurityGroup_Id:
case List_AWS_EC2_Subnet_Id:
parsedIndividualType=ParameterType.String;
isList=true;
break;
case CommaDelimitedList:
parsedIndividualType=ParameterType.CommaDelimitedList;
isList=false;
break;
default :
throw new ValidationErrorException("String_Node_Str" + actualParameterType + "String_Node_Str"+ Arrays.toString(ParameterType.displayValues()));
}
String[] allowedValues=parseAllowedValues(parameterJsonNode);
String allowedPattern=parseAllowedPattern(parameterName,parameterJsonNode,parsedIndividualType);
String constraintDescription=parseConstraintDescription(parameterName,parameterJsonNode);
String description=parseDescription(parameterName,parameterJsonNode);
Double maxLength=parseMaxLength(parameterName,parameterJsonNode,parsedIndividualType);
Double minLength=parseMinLength(parameterName,parameterJsonNode,parsedIndividualType);
if (maxLength != null && minLength != null && maxLength < minLength) {
throw new ValidationErrorException("String_Node_Str" + parameterName + "String_Node_Str"+ ParameterKey.MinLength+ "String_Node_Str"+ ParameterKey.MaxLength+ "String_Node_Str");
}
Double maxValue=parseMaxValue(parameterName,parameterJsonNode,parsedIndividualType);
Double minValue=parseMinValue(parameterName,parameterJsonNode,parsedIndividualType);
if (maxValue != null && minValue != null && maxValue < minValue) {
throw new ValidationErrorException("String_Node_Str" + parameterName + "String_Node_Str"+ ParameterKey.MinValue+ "String_Node_Str"+ ParameterKey.MaxValue+ "String_Node_Str");
}
List<String> valuesToCheck=Lists.newArrayList();
String defaultValue=JsonHelper.getString(parameterJsonNode,ParameterKey.Default.toString());
String userDefinedValue=userParameterMap.get(parameterName);
if (isList) {
valuesToCheck.addAll(splitAndTrimString(defaultValue,"String_Node_Str"));
valuesToCheck.addAll(splitAndTrimString(userDefinedValue,"String_Node_Str"));
}
 else {
valuesToCheck.add(defaultValue);
valuesToCheck.add(userDefinedValue);
}
boolean noEcho="String_Node_Str".equalsIgnoreCase(JsonHelper.getString(parameterJsonNode,ParameterKey.NoEcho.toString()));
for (String value : valuesToCheck) {
if (value != null) {
checkAllowedValues(parameterName,value,allowedValues,constraintDescription);
}
switch (parsedIndividualType) {
case String:
if (value != null) {
parseStringParameter(parameterName,value,allowedPattern,minLength,maxLength,constraintDescription);
}
break;
case Number:
if (value != null) {
parseNumberParameter(parameterName,value,minValue,maxValue,constraintDescription);
}
break;
case CommaDelimitedList:
break;
default :
throw new ValidationErrorException("String_Node_Str" + parsedIndividualType);
}
}
String stringValue=null;
if (defaultValue != null) stringValue=defaultValue;
if (userDefinedValue != null) stringValue=userDefinedValue;
JsonNode jsonValueNode=null;
if (stringValue != null) {
if (isList || actualParameterType == ParameterType.CommaDelimitedList) {
ArrayNode arrayNode=new ObjectMapper().createArrayNode();
for (String s : splitAndTrimString(stringValue,"String_Node_Str")) {
arrayNode.add(s);
}
jsonValueNode=arrayNode;
}
 else {
jsonValueNode=new TextNode(stringValue);
}
}
StackEntity.Parameter parameter=new StackEntity.Parameter();
parameter.setKey(parameterName);
parameter.setNoEcho(noEcho);
parameter.setJsonValue(JsonHelper.getStringFromJsonNode(jsonValueNode));
parameter.setStringValue(stringValue);
TemplateParameter templateParameter=new TemplateParameter();
templateParameter.setDescription(description);
templateParameter.setDefaultValue(defaultValue);
templateParameter.setNoEcho(noEcho);
templateParameter.setParameterKey(parameterName);
return new Parameter(parameter,templateParameter);
}

Fixed version (ground truth):
private static Parameter parseParameter(String parameterName,JsonNode parameterJsonNode,Map<String,String> userParameterMap) throws CloudFormationException {
  validateParameterKeys(parameterJsonNode);
  ParameterType actualParameterType=parseType(parameterJsonNode);
  ParameterType parsedIndividualType=null;
  boolean isList=false;
switch (actualParameterType) {
case String:
case AWS_EC2_KeyPair_KeyName:
case AWS_EC2_SecurityGroup_Id:
case AWS_EC2_Subnet_Id:
    parsedIndividualType=ParameterType.String;
  isList=false;
break;
case Number:
parsedIndividualType=ParameterType.Number;
isList=false;
break;
case List_Number:
parsedIndividualType=ParameterType.Number;
isList=true;
break;
case List_String:
case List_AWS_EC2_KeyPair_KeyName:
case List_AWS_EC2_SecurityGroup_Id:
case List_AWS_EC2_Subnet_Id:
parsedIndividualType=ParameterType.String;
isList=true;
break;
case CommaDelimitedList:
parsedIndividualType=ParameterType.CommaDelimitedList;
isList=false;
break;
default :
throw new ValidationErrorException("String_Node_Str" + actualParameterType + "String_Node_Str"+ Arrays.toString(ParameterType.displayValues()));
}
String[] allowedValues=parseAllowedValues(parameterJsonNode);
String allowedPattern=parseAllowedPattern(parameterName,parameterJsonNode,parsedIndividualType);
String constraintDescription=parseConstraintDescription(parameterName,parameterJsonNode);
String description=parseDescription(parameterName,parameterJsonNode);
Double maxLength=parseMaxLength(parameterName,parameterJsonNode,parsedIndividualType);
Double minLength=parseMinLength(parameterName,parameterJsonNode,parsedIndividualType);
if (maxLength != null && minLength != null && maxLength < minLength) {
throw new ValidationErrorException("String_Node_Str" + parameterName + "String_Node_Str"+ ParameterKey.MinLength+ "String_Node_Str"+ ParameterKey.MaxLength+ "String_Node_Str");
}
Double maxValue=parseMaxValue(parameterName,parameterJsonNode,parsedIndividualType);
Double minValue=parseMinValue(parameterName,parameterJsonNode,parsedIndividualType);
if (maxValue != null && minValue != null && maxValue < minValue) {
throw new ValidationErrorException("String_Node_Str" + parameterName + "String_Node_Str"+ ParameterKey.MinValue+ "String_Node_Str"+ ParameterKey.MaxValue+ "String_Node_Str");
}
List<String> valuesToCheck=Lists.newArrayList();
String defaultValue=JsonHelper.getString(parameterJsonNode,ParameterKey.Default.toString());
String userDefinedValue=userParameterMap.get(parameterName);
if (isList) {
valuesToCheck.addAll(splitAndTrimCSVString(defaultValue));
valuesToCheck.addAll(splitAndTrimCSVString(userDefinedValue));
}
 else {
valuesToCheck.add(defaultValue);
valuesToCheck.add(userDefinedValue);
}
boolean noEcho="String_Node_Str".equalsIgnoreCase(JsonHelper.getString(parameterJsonNode,ParameterKey.NoEcho.toString()));
for (String value : valuesToCheck) {
if (value != null) {
checkAllowedValues(parameterName,value,allowedValues,constraintDescription);
}
switch (parsedIndividualType) {
case String:
if (value != null) {
parseStringParameter(parameterName,value,allowedPattern,minLength,maxLength,constraintDescription);
}
break;
case Number:
if (value != null) {
parseNumberParameter(parameterName,value,minValue,maxValue,constraintDescription);
}
break;
case CommaDelimitedList:
break;
default :
throw new ValidationErrorException("String_Node_Str" + parsedIndividualType);
}
}
String stringValue=null;
if (defaultValue != null) stringValue=defaultValue;
if (userDefinedValue != null) stringValue=userDefinedValue;
JsonNode jsonValueNode=null;
if (stringValue != null) {
if (isList || actualParameterType == ParameterType.CommaDelimitedList) {
ArrayNode arrayNode=new ObjectMapper().createArrayNode();
for (String s : splitAndTrimCSVString(stringValue)) {
arrayNode.add(s);
}
jsonValueNode=arrayNode;
}
 else {
jsonValueNode=new TextNode(stringValue);
}
}
StackEntity.Parameter parameter=new StackEntity.Parameter();
parameter.setKey(parameterName);
parameter.setNoEcho(noEcho);
parameter.setJsonValue(JsonHelper.getStringFromJsonNode(jsonValueNode));
parameter.setStringValue(stringValue);
TemplateParameter templateParameter=new TemplateParameter();
templateParameter.setDescription(description);
templateParameter.setDefaultValue(defaultValue);
templateParameter.setNoEcho(noEcho);
templateParameter.setParameterKey(parameterName);
return new Parameter(parameter,templateParameter);
}