Program: 24679
Project: 24679
Buggy source:
/** 
 * Parse a 'keyword' query, known internally as a multi-field AND.
 */
private Query parseMultiFieldQuery(EasyNode parent,String field,int maxSnippets){
  String name=parent.name();
  if (!name.matches("String_Node_Str"))   error("String_Node_Str");
  if (field != null)   error("String_Node_Str");
  String fieldsStr=parseStringAttrib(parent,"String_Node_Str");
  ArrayList<String> fields=new ArrayList<String>();
  StringTokenizer st=new StringTokenizer(fieldsStr,"String_Node_Str");
  while (st.hasMoreTokens())   fields.add(st.nextToken());
  int slop=parseIntAttrib(parent,"String_Node_Str");
  int maxMetaSnippets=parseIntAttrib(parent,"String_Node_Str",maxSnippets);
  int maxTextSnippets=parseIntAttrib(parent,"String_Node_Str",maxSnippets);
  float[] boosts=null;
  if (parent.hasAttr("String_Node_Str")) {
    boosts=parseFieldBoosts(parent,"String_Node_Str");
    if (boosts != null && boosts.length > fields.size())     error("String_Node_Str");
  }
  ArrayList queryList=new ArrayList();
  Vector<Query> notVec=new Vector<Query>();
  for (int i=0; i < parent.nChildren(); i++) {
    EasyNode el=parent.child(i);
    if (!el.isElement())     continue;
 else     if (el.name().equalsIgnoreCase("String_Node_Str"))     continue;
 else     if (el.name().equalsIgnoreCase("String_Node_Str"))     notVec.add(parseQuery2(el,"String_Node_Str",fieldsStr,maxSnippets));
 else {
      Query q=parseQuery(el,fieldsStr,maxSnippets);
      if (q == null)       continue;
      if (!(q instanceof SpanQuery))       error("String_Node_Str");
      queryList.add(q);
    }
  }
  SpanQuery[] subQueries=(SpanQuery[])queryList.toArray(new SpanQuery[queryList.size()]);
  return createMultiFieldQuery(parent,fields.toArray(new String[fields.size()]),boosts,subQueries,notVec,slop,maxMetaSnippets,maxTextSnippets);
}

Fixed version (ground truth):
/** 
 * Parse a 'keyword' query, known internally as a multi-field AND.
 */
private Query parseMultiFieldQuery(EasyNode parent,String field,int maxSnippets){
  String name=parent.name();
  if (!name.matches("String_Node_Str"))   error("String_Node_Str");
  if (field != null)   error("String_Node_Str");
  String fieldsStr=parseStringAttrib(parent,"String_Node_Str");
  ArrayList<String> fields=new ArrayList<String>();
  StringTokenizer st=new StringTokenizer(fieldsStr,"String_Node_Str");
  while (st.hasMoreTokens())   fields.add(st.nextToken());
  int slop=parseIntAttrib(parent,"String_Node_Str");
  int maxMetaSnippets=parseIntAttrib(parent,"String_Node_Str",maxSnippets);
  int maxTextSnippets=parseIntAttrib(parent,"String_Node_Str",maxSnippets);
  float[] boosts=null;
  if (parent.hasAttr("String_Node_Str")) {
    boosts=parseFieldBoosts(parent,"String_Node_Str");
    if (boosts != null && boosts.length > fields.size())     error("String_Node_Str");
  }
  ArrayList queryList=new ArrayList();
  Vector<Query> notVec=new Vector<Query>();
  for (int i=0; i < parent.nChildren(); i++) {
    EasyNode el=parent.child(i);
    if (!el.isElement())     continue;
 else     if (el.name().equalsIgnoreCase("String_Node_Str"))     continue;
 else     if (el.name().equalsIgnoreCase("String_Node_Str"))     notVec.add(parseQuery2(el,"String_Node_Str",fieldsStr,maxSnippets));
 else {
      Query q=parseQuery(el,fieldsStr,maxSnippets);
      if (q == null)       continue;
      if (!(q instanceof SpanQuery))       error("String_Node_Str");
      queryList.add(q);
    }
  }
  if (queryList.isEmpty())   return null;
  SpanQuery[] subQueries=(SpanQuery[])queryList.toArray(new SpanQuery[queryList.size()]);
  return createMultiFieldQuery(parent,fields.toArray(new String[fields.size()]),boosts,subQueries,notVec,slop,maxMetaSnippets,maxTextSnippets);
}