Program: 51464
Project: 51464
Buggy source:
private Element createParameterElement(final ParameterDefinitionEntry parameter,final ParameterContext parameterContext,final Object selections) throws BeanException, ReportDataFactoryException {
  try {
    final Element parameterElement=document.createElement("String_Node_Str");
    parameterElement.setAttribute("String_Node_Str",parameter.getName());
    final Class<?> valueType=parameter.getValueType();
    parameterElement.setAttribute("String_Node_Str",valueType.getName());
    parameterElement.setAttribute("String_Node_Str",String.valueOf(parameter.isMandatory()));
    final String[] namespaces=parameter.getParameterAttributeNamespaces();
    for (int i=0; i < namespaces.length; i++) {
      final String namespace=namespaces[i];
      final String[] attributeNames=parameter.getParameterAttributeNames(namespace);
      for (      final String attributeName : attributeNames) {
        final String attributeValue=parameter.getParameterAttribute(namespace,attributeName,parameterContext);
        final Element attributeElement=document.createElement("String_Node_Str");
        attributeElement.setAttribute("String_Node_Str",namespace);
        attributeElement.setAttribute("String_Node_Str",attributeName);
        attributeElement.setAttribute("String_Node_Str",attributeValue);
        parameterElement.appendChild(attributeElement);
      }
    }
    final Class<?> elementValueType;
    if (valueType.isArray()) {
      elementValueType=valueType.getComponentType();
    }
 else {
      elementValueType=valueType;
    }
    final LinkedHashSet<Object> selectionSet=new LinkedHashSet<Object>();
    if (selections != null) {
      if (selections.getClass().isArray()) {
        final int length=Array.getLength(selections);
        for (int i=0; i < length; i++) {
          final Object value=Array.get(selections,i);
          selectionSet.add(resolveSelectionValue(value));
        }
      }
 else {
        selectionSet.add(resolveSelectionValue(selections));
      }
    }
 else {
      final String type=parameter.getParameterAttribute(ParameterAttributeNames.Core.NAMESPACE,ParameterAttributeNames.Core.TYPE,parameterContext);
      if (ParameterAttributeNames.Core.TYPE_DATEPICKER.equals(type) && Date.class.isAssignableFrom(valueType)) {
        if (isGenerateDefaultDates()) {
          selectionSet.add(new Date());
        }
      }
    }
    if (Date.class.isAssignableFrom(elementValueType)) {
      parameterElement.setAttribute("String_Node_Str",computeTimeZoneHint(parameter,parameterContext,selectionSet));
    }
    @SuppressWarnings("String_Node_Str") final LinkedHashSet handledValues=(LinkedHashSet)selectionSet.clone();
    if (parameter instanceof ListParameter) {
      final ListParameter asListParam=(ListParameter)parameter;
      parameterElement.setAttribute("String_Node_Str",String.valueOf(asListParam.isAllowMultiSelection()));
      parameterElement.setAttribute("String_Node_Str",String.valueOf(asListParam.isStrictValueCheck()));
      parameterElement.setAttribute("String_Node_Str","String_Node_Str");
      final Element valuesElement=document.createElement("String_Node_Str");
      parameterElement.appendChild(valuesElement);
      final ParameterValues possibleValues=asListParam.getValues(parameterContext);
      for (int i=0; i < possibleValues.getRowCount(); i++) {
        Object key=possibleValues.getKeyValue(i);
        Object value=possibleValues.getTextValue(i);
        final Element valueElement=document.createElement("String_Node_Str");
        valuesElement.appendChild(valueElement);
        if (hasISOControlChars(key,elementValueType) || hasISOControlChars(value,elementValueType)) {
          key=Base64.encodeBase64String(key.toString().getBytes());
          value=Base64.encodeBase64String(value.toString().getBytes());
          valueElement.setAttribute("String_Node_Str","String_Node_Str");
        }
        valueElement.setAttribute("String_Node_Str",String.valueOf(value));
        valueElement.setAttribute("String_Node_Str",elementValueType.getName());
        if (key instanceof Number) {
          final BigDecimal bd=new BigDecimal(String.valueOf(key));
          valueElement.setAttribute("String_Node_Str",String.valueOf(selectionSet.contains(bd)));
          handledValues.remove(bd);
        }
 else         if (key == null) {
          if (selections == null || selectionSet.contains(null)) {
            valueElement.setAttribute("String_Node_Str","String_Node_Str");
            handledValues.remove(null);
          }
        }
 else {
          Object origKey=possibleValues.getKeyValue(i);
          valueElement.setAttribute("String_Node_Str",String.valueOf(selectionSet.contains(origKey)));
          handledValues.remove(key);
        }
        if (key == null) {
          valueElement.setAttribute("String_Node_Str","String_Node_Str");
        }
 else {
          valueElement.setAttribute("String_Node_Str","String_Node_Str");
          valueElement.setAttribute("String_Node_Str",convertParameterValueToString(parameter,parameterContext,key,elementValueType));
        }
      }
      if (!asListParam.isStrictValueCheck()) {
        for (        final Object key : handledValues) {
          final Element valueElement=document.createElement("String_Node_Str");
          valuesElement.appendChild(valueElement);
          valueElement.setAttribute("String_Node_Str",Messages.getInstance().getString("String_Node_Str",String.valueOf(key)));
          valueElement.setAttribute("String_Node_Str",elementValueType.getName());
          if (key instanceof Number) {
            BigDecimal bd=new BigDecimal(String.valueOf(key));
            valueElement.setAttribute("String_Node_Str",String.valueOf(selectionSet.contains(bd)));
          }
 else {
            valueElement.setAttribute("String_Node_Str",String.valueOf(selectionSet.contains(key)));
          }
          if (key == null) {
            valueElement.setAttribute("String_Node_Str","String_Node_Str");
          }
 else {
            valueElement.setAttribute("String_Node_Str","String_Node_Str");
            valueElement.setAttribute("String_Node_Str",convertParameterValueToString(parameter,parameterContext,key,elementValueType));
          }
        }
      }
    }
 else     if (parameter instanceof PlainParameter) {
      parameterElement.setAttribute("String_Node_Str","String_Node_Str");
      parameterElement.setAttribute("String_Node_Str","String_Node_Str");
      parameterElement.setAttribute("String_Node_Str","String_Node_Str");
      if (selections != null) {
        final Element valuesElement=document.createElement("String_Node_Str");
        parameterElement.appendChild(valuesElement);
        final Element valueElement=document.createElement("String_Node_Str");
        valuesElement.appendChild(valueElement);
        valueElement.setAttribute("String_Node_Str",valueType.getName());
        valueElement.setAttribute("String_Node_Str","String_Node_Str");
        valueElement.setAttribute("String_Node_Str","String_Node_Str");
        final String value=convertParameterValueToString(parameter,parameterContext,selections,valueType);
        valueElement.setAttribute("String_Node_Str",value);
        valueElement.setAttribute("String_Node_Str",value);
      }
    }
    return parameterElement;
  }
 catch (  BeanException be) {
    logger.error(Messages.getInstance().getString("String_Node_Str",parameter.getName(),String.valueOf(selections)),be);
    throw be;
  }
}

Fixed version (ground truth):
private Element createParameterElement(final ParameterDefinitionEntry parameter,final ParameterContext parameterContext,final Object selections) throws BeanException, ReportDataFactoryException {
  try {
    final Element parameterElement=document.createElement("String_Node_Str");
    parameterElement.setAttribute("String_Node_Str",parameter.getName());
    final Class<?> valueType=parameter.getValueType();
    parameterElement.setAttribute("String_Node_Str",valueType.getName());
    parameterElement.setAttribute("String_Node_Str",String.valueOf(parameter.isMandatory()));
    final String[] namespaces=parameter.getParameterAttributeNamespaces();
    for (int i=0; i < namespaces.length; i++) {
      final String namespace=namespaces[i];
      final String[] attributeNames=parameter.getParameterAttributeNames(namespace);
      for (      final String attributeName : attributeNames) {
        final String attributeValue=parameter.getParameterAttribute(namespace,attributeName,parameterContext);
        final Element attributeElement=document.createElement("String_Node_Str");
        attributeElement.setAttribute("String_Node_Str",namespace);
        attributeElement.setAttribute("String_Node_Str",attributeName);
        attributeElement.setAttribute("String_Node_Str",attributeValue);
        parameterElement.appendChild(attributeElement);
      }
    }
    final Class<?> elementValueType;
    if (valueType.isArray()) {
      elementValueType=valueType.getComponentType();
    }
 else {
      elementValueType=valueType;
    }
    final LinkedHashSet<Object> selectionSet=new LinkedHashSet<Object>();
    if (selections != null) {
      if (selections.getClass().isArray()) {
        final int length=Array.getLength(selections);
        for (int i=0; i < length; i++) {
          final Object value=Array.get(selections,i);
          selectionSet.add(resolveSelectionValue(value));
        }
      }
 else {
        selectionSet.add(resolveSelectionValue(selections));
      }
    }
 else {
      final String type=parameter.getParameterAttribute(ParameterAttributeNames.Core.NAMESPACE,ParameterAttributeNames.Core.TYPE,parameterContext);
      if (ParameterAttributeNames.Core.TYPE_DATEPICKER.equals(type) && Date.class.isAssignableFrom(valueType)) {
        if (isGenerateDefaultDates()) {
          selectionSet.add(new Date());
        }
      }
    }
    if (Date.class.isAssignableFrom(elementValueType)) {
      parameterElement.setAttribute("String_Node_Str",computeTimeZoneHint(parameter,parameterContext,selectionSet));
    }
    Encoder enc=org.owasp.esapi.ESAPI.encoder();
    @SuppressWarnings("String_Node_Str") final LinkedHashSet handledValues=(LinkedHashSet)selectionSet.clone();
    if (parameter instanceof ListParameter) {
      final ListParameter asListParam=(ListParameter)parameter;
      parameterElement.setAttribute("String_Node_Str",String.valueOf(asListParam.isAllowMultiSelection()));
      parameterElement.setAttribute("String_Node_Str",String.valueOf(asListParam.isStrictValueCheck()));
      parameterElement.setAttribute("String_Node_Str","String_Node_Str");
      final Element valuesElement=document.createElement("String_Node_Str");
      parameterElement.appendChild(valuesElement);
      final ParameterValues possibleValues=asListParam.getValues(parameterContext);
      for (int i=0; i < possibleValues.getRowCount(); i++) {
        Object key=possibleValues.getKeyValue(i);
        Object value=possibleValues.getTextValue(i);
        final Element valueElement=document.createElement("String_Node_Str");
        valuesElement.appendChild(valueElement);
        if (hasISOControlChars(key,elementValueType) || hasISOControlChars(value,elementValueType)) {
          key=Base64.encodeBase64String(key.toString().getBytes());
          value=Base64.encodeBase64String(value.toString().getBytes());
          valueElement.setAttribute("String_Node_Str","String_Node_Str");
        }
        valueElement.setAttribute("String_Node_Str",enc.encodeForHTMLAttribute(String.valueOf(value)));
        valueElement.setAttribute("String_Node_Str",elementValueType.getName());
        if (key instanceof Number) {
          final BigDecimal bd=new BigDecimal(String.valueOf(key));
          valueElement.setAttribute("String_Node_Str",String.valueOf(selectionSet.contains(bd)));
          handledValues.remove(bd);
        }
 else         if (key == null) {
          if (selections == null || selectionSet.contains(null)) {
            valueElement.setAttribute("String_Node_Str","String_Node_Str");
            handledValues.remove(null);
          }
        }
 else {
          Object origKey=possibleValues.getKeyValue(i);
          valueElement.setAttribute("String_Node_Str",String.valueOf(selectionSet.contains(origKey)));
          handledValues.remove(key);
        }
        if (key == null) {
          valueElement.setAttribute("String_Node_Str","String_Node_Str");
        }
 else {
          valueElement.setAttribute("String_Node_Str","String_Node_Str");
          valueElement.setAttribute("String_Node_Str",convertParameterValueToString(parameter,parameterContext,key,elementValueType));
        }
      }
      if (!asListParam.isStrictValueCheck()) {
        for (        final Object key : handledValues) {
          final Element valueElement=document.createElement("String_Node_Str");
          valuesElement.appendChild(valueElement);
          valueElement.setAttribute("String_Node_Str",Messages.getInstance().getString("String_Node_Str",String.valueOf(key)));
          valueElement.setAttribute("String_Node_Str",elementValueType.getName());
          if (key instanceof Number) {
            BigDecimal bd=new BigDecimal(String.valueOf(key));
            valueElement.setAttribute("String_Node_Str",String.valueOf(selectionSet.contains(bd)));
          }
 else {
            valueElement.setAttribute("String_Node_Str",String.valueOf(selectionSet.contains(key)));
          }
          if (key == null) {
            valueElement.setAttribute("String_Node_Str","String_Node_Str");
          }
 else {
            valueElement.setAttribute("String_Node_Str","String_Node_Str");
            valueElement.setAttribute("String_Node_Str",convertParameterValueToString(parameter,parameterContext,key,elementValueType));
          }
        }
      }
    }
 else     if (parameter instanceof PlainParameter) {
      parameterElement.setAttribute("String_Node_Str","String_Node_Str");
      parameterElement.setAttribute("String_Node_Str","String_Node_Str");
      parameterElement.setAttribute("String_Node_Str","String_Node_Str");
      if (selections != null) {
        final Element valuesElement=document.createElement("String_Node_Str");
        parameterElement.appendChild(valuesElement);
        final Element valueElement=document.createElement("String_Node_Str");
        valuesElement.appendChild(valueElement);
        valueElement.setAttribute("String_Node_Str",valueType.getName());
        valueElement.setAttribute("String_Node_Str","String_Node_Str");
        valueElement.setAttribute("String_Node_Str","String_Node_Str");
        final String value=convertParameterValueToString(parameter,parameterContext,selections,valueType);
        valueElement.setAttribute("String_Node_Str",value);
        valueElement.setAttribute("String_Node_Str",enc.encodeForHTMLAttribute(value));
      }
    }
    return parameterElement;
  }
 catch (  BeanException be) {
    logger.error(Messages.getInstance().getString("String_Node_Str",parameter.getName(),String.valueOf(selections)),be);
    throw be;
  }
}