Program: 14258
Project: 14258
Buggy source:
private void parseParameters(List<Parameter> userParameters,Map<String,String> paramMap,Template template,JSONObject templateJSONObject) throws ValidationErrorException {
  if (userParameters != null) {
    for (    Parameter userParameter : userParameters) {
      paramMap.put(userParameter.getParameterKey(),userParameter.getParameterValue());
    }
  }
  JSONObject parametersJSONObject=getJSONObject(templateJSONObject,TemplateSection.Parameters.toString(),"String_Node_Str");
  if (parametersJSONObject != null) {
    Set<String> parameterKeys=(Set<String>)parametersJSONObject.keySet();
    Set<String> noValueParameters=Sets.newHashSet();
    for (    String parameterKey : parameterKeys) {
      Object parameterObject=parametersJSONObject.get(parameterKey);
      if (!(parameterObject instanceof JSONObject)) {
        throw new ValidationErrorException("String_Node_Str");
      }
      JSONObject parameterJSONObject=(JSONObject)parameterObject;
      Set<String> tempParameterKeys=Sets.newHashSet((Set<String>)parameterJSONObject.keySet());
      for (      ValidParameterKey section : ValidParameterKey.values()) {
        tempParameterKeys.remove(section.toString());
      }
      if (!tempParameterKeys.isEmpty()) {
        throw new ValidationErrorException("String_Node_Str" + tempParameterKeys.toString());
      }
      Template.Parameter parameter=new Template.Parameter();
      String typeStr=getString(parameterJSONObject,ValidParameterKey.Type.toString());
      if (typeStr == null) {
        throw new ValidationErrorException("String_Node_Str");
      }
      Template.ParameterType parameterType=null;
      try {
        parameterType=Template.ParameterType.valueOf(typeStr);
      }
 catch (      Exception ex) {
        throw new ValidationErrorException("String_Node_Str" + typeStr);
      }
      JSONArray allowedValuesJSONArray=getJSONArray(parameterJSONObject,ValidParameterKey.AllowedValues.toString());
      if (allowedValuesJSONArray != null) {
        String[] allowedValues=new String[allowedValuesJSONArray.size()];
        for (int index=0; index < allowedValues.length; index++) {
          Object allowedValueObject=allowedValuesJSONArray.get(index);
          if (allowedValueObject == null || !(allowedValueObject instanceof String)) {
            throw new ValidationErrorException("String_Node_Str");
          }
          allowedValues[index]=(String)allowedValueObject;
        }
        parameter.setAllowedValues(allowedValues);
      }
      parameter.setAllowedPattern(getString(parameterJSONObject,ValidParameterKey.AllowedPattern.toString()));
      String constraintDescription=getString(parameterJSONObject,ValidParameterKey.ConstraintDescription.toString());
      if (constraintDescription != null && constraintDescription.length() > 4000) {
        throw new ValidationErrorException("String_Node_Str");
      }
      parameter.setConstraintDescription(constraintDescription);
      parameter.setDefaultValue(getString(parameterJSONObject,ValidParameterKey.Default.toString()));
      String description=getString(parameterJSONObject,ValidParameterKey.Description.toString());
      if (description != null && constraintDescription.length() > 4000) {
        throw new ValidationErrorException("String_Node_Str");
      }
      parameter.setDescription(description);
      parameter.setMaxLength(getDouble(parameterJSONObject,ValidParameterKey.MaxLength.toString()));
      parameter.setMinLength(getDouble(parameterJSONObject,ValidParameterKey.MinLength.toString()));
      parameter.setMaxValue(getDouble(parameterJSONObject,ValidParameterKey.MaxValue.toString()));
      parameter.setMinValue(getDouble(parameterJSONObject,ValidParameterKey.MinValue.toString()));
      parameter.setDefaultValue(getString(parameterJSONObject,ValidParameterKey.Default.toString()));
      parameter.setNoEcho("String_Node_Str".equalsIgnoreCase(getString(parameterJSONObject,ValidParameterKey.NoEcho.toString())));
      parameter.setParameterKey(parameterKey);
      parameter.setType(parameterType);
      parameter.setParameterValue(paramMap.get(parameterKey) != null ? paramMap.get(parameterKey) : parameter.getDefaultValue());
      if (parameter.getParameterValue() == null) {
        noValueParameters.add(parameterKey);
        continue;
      }
      if (parameter.getAllowedValues() != null && !Arrays.asList(parameter.getAllowedValues()).contains(parameter.getParameterValue())) {
        throw new ValidationErrorException(parameter.getConstraintDescription() != null ? parameter.getConstraintDescription() : "String_Node_Str" + parameterKey + "String_Node_Str");
      }
switch (parameterType) {
case Number:
        parseNumberParameter(parameterKey,parameter);
      break;
case String:
    parseStringParameter(parameterKey,parameter);
  break;
case CommaDelimitedList:
parseCommaDelimitedListParameter(parameterKey,parameter);
break;
default :
throw new ValidationErrorException("String_Node_Str" + typeStr);
}
template.addParameter(parameter);
if (!noValueParameters.isEmpty()) {
throw new ValidationErrorException("String_Node_Str" + noValueParameters + "String_Node_Str");
}
Template.Reference reference=new Template.Reference();
reference.setReady(true);
reference.setReferenceName(parameter.getParameterKey());
reference.setReferenceValue(parameter.getParameterValue());
reference.setReferenceType(Template.ReferenceType.Parameter);
template.getReferenceMap().put(parameter.getParameterKey(),reference);
}
}
Set<String> userParamKeys=Sets.newHashSet();
Set<String> templateParamKeys=Sets.newHashSet();
if (userParameters != null) {
userParamKeys.addAll(paramMap.keySet());
}
if (parametersJSONObject != null) {
templateParamKeys.addAll((Set<String>)parametersJSONObject.keySet());
}
userParamKeys.removeAll(templateParamKeys);
if (!userParamKeys.isEmpty()) {
throw new ValidationErrorException("String_Node_Str" + userParamKeys + "String_Node_Str");
}
}

Fixed version (ground truth):
private void parseParameters(List<Parameter> userParameters,Map<String,String> paramMap,Template template,JSONObject templateJSONObject) throws ValidationErrorException {
  if (userParameters != null) {
    for (    Parameter userParameter : userParameters) {
      paramMap.put(userParameter.getParameterKey(),userParameter.getParameterValue());
    }
  }
  JSONObject parametersJSONObject=getJSONObject(templateJSONObject,TemplateSection.Parameters.toString(),"String_Node_Str");
  if (parametersJSONObject != null) {
    Set<String> parameterKeys=(Set<String>)parametersJSONObject.keySet();
    Set<String> noValueParameters=Sets.newHashSet();
    for (    String parameterKey : parameterKeys) {
      Object parameterObject=parametersJSONObject.get(parameterKey);
      if (!(parameterObject instanceof JSONObject)) {
        throw new ValidationErrorException("String_Node_Str");
      }
      JSONObject parameterJSONObject=(JSONObject)parameterObject;
      Set<String> tempParameterKeys=Sets.newHashSet((Set<String>)parameterJSONObject.keySet());
      for (      ValidParameterKey section : ValidParameterKey.values()) {
        tempParameterKeys.remove(section.toString());
      }
      if (!tempParameterKeys.isEmpty()) {
        throw new ValidationErrorException("String_Node_Str" + tempParameterKeys.toString());
      }
      Template.Parameter parameter=new Template.Parameter();
      String typeStr=getString(parameterJSONObject,ValidParameterKey.Type.toString());
      if (typeStr == null) {
        throw new ValidationErrorException("String_Node_Str");
      }
      Template.ParameterType parameterType=null;
      try {
        parameterType=Template.ParameterType.valueOf(typeStr);
      }
 catch (      Exception ex) {
        throw new ValidationErrorException("String_Node_Str" + typeStr);
      }
      JSONArray allowedValuesJSONArray=getJSONArray(parameterJSONObject,ValidParameterKey.AllowedValues.toString());
      if (allowedValuesJSONArray != null) {
        String[] allowedValues=new String[allowedValuesJSONArray.size()];
        for (int index=0; index < allowedValues.length; index++) {
          Object allowedValueObject=allowedValuesJSONArray.get(index);
          if (allowedValueObject == null || !(allowedValueObject instanceof String)) {
            throw new ValidationErrorException("String_Node_Str");
          }
          allowedValues[index]=(String)allowedValueObject;
        }
        parameter.setAllowedValues(allowedValues);
      }
      parameter.setAllowedPattern(getString(parameterJSONObject,ValidParameterKey.AllowedPattern.toString()));
      String constraintDescription=getString(parameterJSONObject,ValidParameterKey.ConstraintDescription.toString());
      if (constraintDescription != null && constraintDescription.length() > 4000) {
        throw new ValidationErrorException("String_Node_Str");
      }
      parameter.setConstraintDescription(constraintDescription);
      parameter.setDefaultValue(getString(parameterJSONObject,ValidParameterKey.Default.toString()));
      String description=getString(parameterJSONObject,ValidParameterKey.Description.toString());
      if (description != null && description.length() > 4000) {
        throw new ValidationErrorException("String_Node_Str");
      }
      parameter.setDescription(description);
      parameter.setMaxLength(getDouble(parameterJSONObject,ValidParameterKey.MaxLength.toString()));
      parameter.setMinLength(getDouble(parameterJSONObject,ValidParameterKey.MinLength.toString()));
      parameter.setMaxValue(getDouble(parameterJSONObject,ValidParameterKey.MaxValue.toString()));
      parameter.setMinValue(getDouble(parameterJSONObject,ValidParameterKey.MinValue.toString()));
      parameter.setDefaultValue(getString(parameterJSONObject,ValidParameterKey.Default.toString()));
      parameter.setNoEcho("String_Node_Str".equalsIgnoreCase(getString(parameterJSONObject,ValidParameterKey.NoEcho.toString())));
      parameter.setParameterKey(parameterKey);
      parameter.setType(parameterType);
      parameter.setParameterValue(paramMap.get(parameterKey) != null ? paramMap.get(parameterKey) : parameter.getDefaultValue());
      if (parameter.getParameterValue() == null) {
        noValueParameters.add(parameterKey);
        continue;
      }
      if (parameter.getAllowedValues() != null && !Arrays.asList(parameter.getAllowedValues()).contains(parameter.getParameterValue())) {
        throw new ValidationErrorException(parameter.getConstraintDescription() != null ? parameter.getConstraintDescription() : "String_Node_Str" + parameterKey + "String_Node_Str");
      }
switch (parameterType) {
case Number:
        parseNumberParameter(parameterKey,parameter);
      break;
case String:
    parseStringParameter(parameterKey,parameter);
  break;
case CommaDelimitedList:
parseCommaDelimitedListParameter(parameterKey,parameter);
break;
default :
throw new ValidationErrorException("String_Node_Str" + typeStr);
}
template.addParameter(parameter);
if (!noValueParameters.isEmpty()) {
throw new ValidationErrorException("String_Node_Str" + noValueParameters + "String_Node_Str");
}
Template.Reference reference=new Template.Reference();
reference.setReady(true);
reference.setReferenceName(parameter.getParameterKey());
reference.setReferenceValue(parameter.getParameterValue());
reference.setReferenceType(Template.ReferenceType.Parameter);
template.getReferenceMap().put(parameter.getParameterKey(),reference);
}
}
Set<String> userParamKeys=Sets.newHashSet();
Set<String> templateParamKeys=Sets.newHashSet();
if (userParameters != null) {
userParamKeys.addAll(paramMap.keySet());
}
if (parametersJSONObject != null) {
templateParamKeys.addAll((Set<String>)parametersJSONObject.keySet());
}
userParamKeys.removeAll(templateParamKeys);
if (!userParamKeys.isEmpty()) {
throw new ValidationErrorException("String_Node_Str" + userParamKeys + "String_Node_Str");
}
}