Program: 70894
Project: 70894
Buggy source:
/** 
 * Handle SOAP operation. Parse report parameters and display text
 * @param operation
 * @param bean
 * @param parameterMap
 * @param displayTexts
 * @throws Exception
 */
public static void handleOperation(Operation operation,ViewerAttributeBean bean,Map parameterMap,Map displayTexts) throws Exception {
  if (operation == null || bean == null || parameterMap == null || displayTexts == null)   return;
  List locs=new ArrayList();
  Map params=new HashMap();
  String displayTextParam=null;
  Oprand[] oprands=operation.getOprand();
  for (int i=0; i < oprands.length; i++) {
    String paramName=oprands[i].getName();
    Object paramValue=oprands[i].getValue();
    if (paramName == null || paramValue == null)     continue;
    if (paramName.equalsIgnoreCase(ParameterAccessor.PARAM_ISLOCALE)) {
      locs.add(paramValue);
    }
 else     if ((displayTextParam=ParameterAccessor.isDisplayText(paramName)) != null) {
      ParameterDefinition parameter=bean.findParameterDefinition(displayTextParam);
      if (parameter != null) {
        if (parameter.isMultiValue())         displayTexts.put(displayTextParam,null);
 else         displayTexts.put(displayTextParam,paramValue);
      }
      continue;
    }
 else {
      if (ParameterAccessor.PARAM_ISNULL.equalsIgnoreCase(paramName)) {
        paramName=(String)paramValue;
        paramValue=null;
      }
      List list=(List)params.get(paramName);
      if (list == null) {
        list=new ArrayList();
        params.put(paramName,list);
      }
      list.add(paramValue);
    }
  }
  Iterator it=params.keySet().iterator();
  while (it.hasNext()) {
    String paramName=(String)it.next();
    List paramValues=(List)params.get(paramName);
    ParameterDefinition parameter=bean.findParameterDefinition(paramName);
    if (parameter == null)     continue;
    String pattern=parameter.getPattern();
    String dataType=ParameterDataTypeConverter.ConvertDataType(parameter.getDataType());
    boolean isLocale=locs.contains(paramName);
    if (parameter.isMultiValue()) {
      List values=new ArrayList();
      for (int i=0; i < paramValues.size(); i++) {
        Object paramValueObj=DataUtil.validate(paramName,dataType,pattern,(String)paramValues.get(i),bean.getLocale(),bean.getTimeZone(),isLocale);
        values.add(paramValueObj);
      }
      if (values.size() == 0 || (values.size() == 1 && values.get(0) == null))       parameterMap.put(paramName,null);
 else       parameterMap.put(paramName,values.toArray());
    }
 else {
      Object paramValueObj=DataUtil.validate(paramName,dataType,pattern,(String)paramValues.get(0),bean.getLocale(),bean.getTimeZone(),isLocale);
      parameterMap.put(paramName,paramValueObj);
    }
  }
}

Fixed version (ground truth):
/** 
 * Handle SOAP operation. Parse report parameters and display text
 * @param operation
 * @param bean
 * @param parameterMap
 * @param displayTexts
 * @throws Exception
 */
public static void handleOperation(Operation operation,ViewerAttributeBean bean,Map parameterMap,Map displayTexts) throws Exception {
  if (operation == null || bean == null || parameterMap == null || displayTexts == null)   return;
  List locs=new ArrayList();
  Map params=new HashMap();
  String displayTextParam=null;
  Oprand[] oprands=operation.getOprand();
  for (int i=0; i < oprands.length; i++) {
    String paramName=oprands[i].getName();
    Object paramValue=oprands[i].getValue();
    if (paramName == null || paramValue == null)     continue;
    if (paramName.equalsIgnoreCase(ParameterAccessor.PARAM_ISLOCALE)) {
      locs.add(paramValue);
    }
 else     if ((displayTextParam=ParameterAccessor.isDisplayText(paramName)) != null) {
      ParameterDefinition parameter=bean.findParameterDefinition(displayTextParam);
      if (parameter != null) {
        if (parameter.isMultiValue())         displayTexts.put(displayTextParam,null);
 else         displayTexts.put(displayTextParam,paramValue);
      }
      continue;
    }
 else {
      if (ParameterAccessor.PARAM_ISNULL.equalsIgnoreCase(paramName)) {
        paramName=(String)paramValue;
        paramValue=null;
      }
      List list=(List)params.get(paramName);
      if (list == null) {
        list=new ArrayList();
        params.put(paramName,list);
      }
      list.add(paramValue);
    }
  }
  Iterator it=params.entrySet().iterator();
  while (it.hasNext()) {
    Map.Entry entry=(Map.Entry)it.next();
    String paramName=(String)entry.getKey();
    List paramValues=(List)entry.getValue();
    ParameterDefinition parameter=bean.findParameterDefinition(paramName);
    if (parameter == null)     continue;
    String pattern=parameter.getPattern();
    String dataType=ParameterDataTypeConverter.ConvertDataType(parameter.getDataType());
    boolean isLocale=locs.contains(paramName);
    if (parameter.isMultiValue()) {
      List values=new ArrayList();
      for (int i=0; i < paramValues.size(); i++) {
        Object paramValueObj=DataUtil.validate(paramName,dataType,pattern,(String)paramValues.get(i),bean.getLocale(),bean.getTimeZone(),isLocale);
        values.add(paramValueObj);
      }
      if (values.size() == 0 || (values.size() == 1 && values.get(0) == null))       parameterMap.put(paramName,null);
 else       parameterMap.put(paramName,values.toArray());
    }
 else {
      Object paramValueObj=DataUtil.validate(paramName,dataType,pattern,(String)paramValues.get(0),bean.getLocale(),bean.getTimeZone(),isLocale);
      parameterMap.put(paramName,paramValueObj);
    }
  }
}