Program: 29741
Project: 29741
Buggy source:
/** 
 * Process the end of this element.
 */
public void end() throws Exception {
  Object parameters[]=null;
  if (paramCount > 0) {
    parameters=(Object[])digester.popParams();
    if (digester.log.isLoggable(Level.FINEST)) {
      for (int i=0, size=parameters.length; i < size; i++) {
        digester.log.finest("String_Node_Str" + i + "String_Node_Str"+ parameters[i]);
      }
    }
    if (paramCount == 1 && parameters[0] == null) {
      return;
    }
  }
 else   if (paramTypes != null && paramTypes.length != 0) {
    if (bodyText == null) {
      return;
    }
    parameters=new Object[1];
    parameters[0]=bodyText;
    if (paramTypes.length == 0) {
      paramTypes=new Class[1];
      paramTypes[0]="String_Node_Str".getClass();
    }
  }
  Object paramValues[]=new Object[paramTypes.length];
  for (int i=0; i < paramTypes.length; i++) {
    if (parameters[i] == null || (parameters[i] instanceof String && !String.class.isAssignableFrom(paramTypes[i]))) {
      paramValues[i]=IntrospectionUtils.convert((String)parameters[i],paramTypes[i]);
    }
 else {
      paramValues[i]=parameters[i];
    }
  }
  Object target;
  if (targetOffset >= 0) {
    target=digester.peek(targetOffset);
  }
 else {
    target=digester.peek(digester.getCount() + targetOffset);
  }
  if (target == null) {
    StringBuilder sb=new StringBuilder();
    sb.append("String_Node_Str");
    sb.append(digester.match);
    sb.append("String_Node_Str");
    sb.append("String_Node_Str");
    sb.append(targetOffset);
    sb.append("String_Node_Str");
    sb.append(digester.getCount());
    sb.append("String_Node_Str");
    throw new org.xml.sax.SAXException(sb.toString());
  }
  if (digester.log.isLoggable(Level.FINE)) {
    StringBuilder sb=new StringBuilder("String_Node_Str");
    sb.append(digester.match);
    sb.append("String_Node_Str");
    sb.append(target.getClass().getName());
    sb.append("String_Node_Str");
    sb.append(methodName);
    sb.append("String_Node_Str");
    for (int i=0; i < paramValues.length; i++) {
      if (i > 0) {
        sb.append("String_Node_Str");
      }
      if (paramValues[i] == null) {
        sb.append("String_Node_Str");
      }
 else {
        sb.append(paramValues[i].toString());
      }
      sb.append("String_Node_Str");
      if (paramTypes[i] == null) {
        sb.append("String_Node_Str");
      }
 else {
        sb.append(paramTypes[i].getName());
      }
    }
    sb.append("String_Node_Str");
    digester.log.fine(sb.toString());
  }
  Object result=IntrospectionUtils.callMethodN(target,methodName,paramValues,paramTypes);
  processMethodCallResult(result);
}

Fixed version (ground truth):
/** 
 * Process the end of this element.
 */
public void end() throws Exception {
  Object parameters[]=null;
  if (paramCount > 0) {
    parameters=(Object[])digester.popParams();
    if (digester.log.isLoggable(Level.FINEST)) {
      for (int i=0, size=parameters.length; i < size; i++) {
        digester.log.finest("String_Node_Str" + i + "String_Node_Str"+ parameters[i]);
      }
    }
    if (paramCount == 1 && parameters[0] == null) {
      return;
    }
  }
 else   if (paramTypes != null && paramTypes.length != 0) {
    if (bodyText == null) {
      return;
    }
    parameters=new Object[1];
    parameters[0]=bodyText;
    if (paramTypes.length == 0) {
      paramTypes=new Class[1];
      paramTypes[0]="String_Node_Str".getClass();
    }
  }
  Object paramValues[]=null;
  if (paramTypes != null) {
    paramValues=new Object[paramTypes.length];
    for (int i=0; i < paramTypes.length; i++) {
      if (parameters[i] == null || (parameters[i] instanceof String && !String.class.isAssignableFrom(paramTypes[i]))) {
        paramValues[i]=IntrospectionUtils.convert((String)parameters[i],paramTypes[i]);
      }
 else {
        paramValues[i]=parameters[i];
      }
    }
  }
  Object target;
  if (targetOffset >= 0) {
    target=digester.peek(targetOffset);
  }
 else {
    target=digester.peek(digester.getCount() + targetOffset);
  }
  if (target == null) {
    StringBuilder sb=new StringBuilder();
    sb.append("String_Node_Str");
    sb.append(digester.match);
    sb.append("String_Node_Str");
    sb.append("String_Node_Str");
    sb.append(targetOffset);
    sb.append("String_Node_Str");
    sb.append(digester.getCount());
    sb.append("String_Node_Str");
    throw new org.xml.sax.SAXException(sb.toString());
  }
  if (digester.log.isLoggable(Level.FINE)) {
    StringBuilder sb=new StringBuilder("String_Node_Str");
    sb.append(digester.match);
    sb.append("String_Node_Str");
    sb.append(target.getClass().getName());
    sb.append("String_Node_Str");
    sb.append(methodName);
    sb.append("String_Node_Str");
    for (int i=0; paramValues != null && i < paramValues.length; i++) {
      if (i > 0) {
        sb.append("String_Node_Str");
      }
      if (paramValues[i] == null) {
        sb.append("String_Node_Str");
      }
 else {
        sb.append(paramValues[i].toString());
      }
      sb.append("String_Node_Str");
      if (paramTypes[i] == null) {
        sb.append("String_Node_Str");
      }
 else {
        sb.append(paramTypes[i].getName());
      }
    }
    sb.append("String_Node_Str");
    digester.log.fine(sb.toString());
  }
  Object result=IntrospectionUtils.callMethodN(target,methodName,paramValues,paramTypes);
  processMethodCallResult(result);
}