Program: 97757
Project: 97757
Buggy source:
public static List<Object> matchDecoder(Event e,Object instanceType,List<Decoder<? extends Object,?>> decoders,List<Object> decodedObjects){
  for (  Decoder d : decoders) {
    Class<?>[] typeArguments=TypeResolver.resolveArguments(d.getClass(),Decoder.class);
    if (instanceType != null && typeArguments.length > 0 && typeArguments[0].isAssignableFrom(instanceType.getClass())) {
      boolean replay=ReplayDecoder.class.isAssignableFrom(d.getClass());
      logger.trace("String_Node_Str",d,instanceType);
      Object decoded=null;
      try {
        decoded=d.decode(e,instanceType);
      }
 catch (      Exception ex) {
        logger.warn("String_Node_Str",ex);
      }
      if (decoded != null && Decoder.Decoded.class.isAssignableFrom(decoded.getClass())) {
        Decoder.Decoded<?> o=Decoder.Decoded.class.cast(decoded);
        if (o.action().equals(Decoder.Decoded.ACTION.ABORT)) {
          logger.trace("String_Node_Str",d,instanceType);
          decodedObjects.add(o);
          break;
        }
 else         if (o.decoded() != null) {
          decoded=o.decoded();
        }
      }
      if (replay && decoded != null && List.class.isAssignableFrom(decoded.getClass())) {
        List<Object> l=List.class.cast(decoded);
        if (l.isEmpty()) {
          continue;
        }
        List<Decoder<? extends Object,?>> nd=new ArrayList<Decoder<? extends Object,?>>();
        boolean add=false;
        for (        Decoder d2 : decoders) {
          if (d2.equals(d)) {
            add=true;
            continue;
          }
          if (add)           nd.add(d2);
        }
        if (nd.isEmpty()) {
          return l;
        }
        for (        Object m : l) {
          return matchDecoder(e,m,nd,decodedObjects);
        }
      }
 else       if (decoded != null) {
        logger.trace("String_Node_Str",d,instanceType);
        decodedObjects.add(decoded);
      }
    }
  }
  return decodedObjects;
}

Fixed version (ground truth):
public static List<Object> matchDecoder(Event e,Object instanceType,List<Decoder<? extends Object,?>> decoders,List<Object> decodedObjects){
  for (  Decoder d : decoders) {
    Class<?>[] typeArguments=TypeResolver.resolveArguments(d.getClass(),Decoder.class);
    if (instanceType != null && typeArguments.length > 0 && typeArguments[0].isAssignableFrom(instanceType.getClass())) {
      boolean replay=ReplayDecoder.class.isAssignableFrom(d.getClass());
      logger.trace("String_Node_Str",d,instanceType);
      Object decoded=null;
      try {
        decoded=d.decode(e,instanceType);
      }
 catch (      Exception ex) {
        logger.warn("String_Node_Str",ex);
      }
      if (decoded != null && Decoder.Decoded.class.isAssignableFrom(decoded.getClass())) {
        Decoder.Decoded<?> o=Decoder.Decoded.class.cast(decoded);
        if (o.action().equals(Decoder.Decoded.ACTION.ABORT)) {
          logger.trace("String_Node_Str",d,instanceType);
          decodedObjects.add(o);
          break;
        }
 else         if (o.decoded() != null) {
          decoded=o.decoded();
        }
      }
      if (replay && decoded != null && List.class.isAssignableFrom(decoded.getClass())) {
        List<Object> l=List.class.cast(decoded);
        if (l.isEmpty()) {
          continue;
        }
        List<Decoder<? extends Object,?>> nd=new ArrayList<Decoder<? extends Object,?>>();
        boolean add=false;
        for (        Decoder d2 : decoders) {
          if (d2.equals(d)) {
            add=true;
            continue;
          }
          if (add)           nd.add(d2);
        }
        if (nd.isEmpty()) {
          return l;
        }
        ArrayList<Object> list=new ArrayList<Object>();
        for (        Object m : l) {
          list.add(matchDecoder(e,m,nd,decodedObjects));
        }
        return list;
      }
 else       if (decoded != null) {
        logger.trace("String_Node_Str",d,instanceType);
        decodedObjects.add(decoded);
      }
    }
  }
  return decodedObjects;
}