Program: 3594
Project: 3594
Buggy source:
/** 
 * writes an index record - the index record is a set of name/value hashes, which are sent to Lucene.
 */
private static void writeItemIndex(Context c,IndexWriter writer,Item myitem) throws SQLException, IOException {
  String location_text=buildItemLocationString(c,myitem);
  ArrayList indexes=new ArrayList();
  for (int i=1; ConfigurationManager.getProperty("String_Node_Str" + i) != null; i++) {
    indexes.add(ConfigurationManager.getProperty("String_Node_Str" + i));
  }
  int j, k=0;
  HashMap textvalues=new HashMap();
  if (indexes.size() > 0) {
    ArrayList fields=new ArrayList();
    ArrayList content=new ArrayList();
    DCValue[] mydc;
    for (int i=0; i < indexes.size(); i++) {
      String index=(String)indexes.get(i);
      String dc[]=index.split("String_Node_Str");
      String myindex=dc[0];
      String elements[]=dc[1].split("String_Node_Str");
      String element=elements[0];
      String qualifier=elements[1];
      if (qualifier.equals("String_Node_Str")) {
        mydc=myitem.getDC(element,Item.ANY,Item.ANY);
      }
 else {
        mydc=myitem.getDC(element,qualifier,Item.ANY);
      }
      String content_text="String_Node_Str";
      for (j=0; j < mydc.length; j++) {
        content_text=new String(content_text + mydc[j].value + "String_Node_Str");
      }
      k=fields.indexOf(myindex);
      if (k < 0) {
        fields.add(myindex);
        content.add(content_text);
      }
 else {
        content_text=new String(content_text + (String)content.get(k) + "String_Node_Str");
        content.set(k,content_text);
      }
    }
    for (int i=0; i < fields.size(); i++) {
      textvalues.put((String)fields.get(i),(String)content.get(i));
    }
  }
 else {
    DCValue[] authors=myitem.getDC("String_Node_Str",Item.ANY,Item.ANY);
    DCValue[] creators=myitem.getDC("String_Node_Str",Item.ANY,Item.ANY);
    DCValue[] titles=myitem.getDC("String_Node_Str",Item.ANY,Item.ANY);
    DCValue[] keywords=myitem.getDC("String_Node_Str",Item.ANY,Item.ANY);
    DCValue[] abstracts=myitem.getDC("String_Node_Str","String_Node_Str",Item.ANY);
    DCValue[] sors=myitem.getDC("String_Node_Str","String_Node_Str",Item.ANY);
    DCValue[] series=myitem.getDC("String_Node_Str","String_Node_Str",Item.ANY);
    DCValue[] tocs=myitem.getDC("String_Node_Str","String_Node_Str",Item.ANY);
    DCValue[] mimetypes=myitem.getDC("String_Node_Str","String_Node_Str",Item.ANY);
    DCValue[] sponsors=myitem.getDC("String_Node_Str","String_Node_Str",Item.ANY);
    DCValue[] identifiers=myitem.getDC("String_Node_Str",Item.ANY,Item.ANY);
    String author_text="String_Node_Str";
    String title_text="String_Node_Str";
    String keyword_text="String_Node_Str";
    String abstract_text="String_Node_Str";
    String sor_text="String_Node_Str";
    String series_text="String_Node_Str";
    String mime_text="String_Node_Str";
    String sponsor_text="String_Node_Str";
    String id_text="String_Node_Str";
    for (j=0; j < authors.length; j++) {
      author_text=new String(author_text + authors[j].value + "String_Node_Str");
    }
    for (j=0; j < creators.length; j++) {
      author_text=new String(author_text + creators[j].value + "String_Node_Str");
    }
    for (j=0; j < sors.length; j++) {
      author_text=new String(author_text + sors[j].value + "String_Node_Str");
    }
    for (j=0; j < titles.length; j++) {
      title_text=new String(title_text + titles[j].value + "String_Node_Str");
    }
    for (j=0; j < keywords.length; j++) {
      keyword_text=new String(keyword_text + keywords[j].value + "String_Node_Str");
    }
    for (j=0; j < abstracts.length; j++) {
      abstract_text=new String(abstract_text + abstracts[j].value + "String_Node_Str");
    }
    for (j=0; j < tocs.length; j++) {
      abstract_text=new String(abstract_text + tocs[j].value + "String_Node_Str");
    }
    for (j=0; j < series.length; j++) {
      series_text=new String(series_text + series[j].value + "String_Node_Str");
    }
    for (j=0; j < mimetypes.length; j++) {
      mime_text=new String(mime_text + mimetypes[j].value + "String_Node_Str");
    }
    for (j=0; j < sponsors.length; j++) {
      sponsor_text=new String(sponsor_text + sponsors[j].value + "String_Node_Str");
    }
    for (j=0; j < identifiers.length; j++) {
      id_text=new String(id_text + identifiers[j].value + "String_Node_Str");
    }
    textvalues.put("String_Node_Str",author_text);
    textvalues.put("String_Node_Str",title_text);
    textvalues.put("String_Node_Str",keyword_text);
    textvalues.put("String_Node_Str",location_text);
    textvalues.put("String_Node_Str",abstract_text);
    textvalues.put("String_Node_Str",series_text);
    textvalues.put("String_Node_Str",mime_text);
    textvalues.put("String_Node_Str",sponsor_text);
    textvalues.put("String_Node_Str",id_text);
  }
  String extractedText="String_Node_Str";
  Bundle[] myBundles=myitem.getBundles();
  for (int i=0; i < myBundles.length; i++) {
    if (myBundles[i].getName() != null && myBundles[i].getName().equals("String_Node_Str")) {
      Bitstream[] myBitstreams=myBundles[i].getBitstreams();
      for (j=0; j < myBitstreams.length; j++) {
        try {
          InputStreamReader is=new InputStreamReader(myBitstreams[j].retrieve());
          StringBuffer sb=new StringBuffer();
          char[] charBuffer=new char[1024];
          while (true) {
            int bytesIn=is.read(charBuffer);
            if (bytesIn == -1)             break;
            if (bytesIn > 0) {
              sb.append(charBuffer,0,bytesIn);
            }
          }
          extractedText=extractedText.concat(new String(sb));
        }
 catch (        AuthorizeException e) {
        }
      }
    }
  }
  String itemhandle=HandleManager.findHandle(c,myitem);
  textvalues.put("String_Node_Str",itemhandle);
  writeIndexRecord(writer,Constants.ITEM,itemhandle,textvalues,extractedText);
}

Fixed version (ground truth):
/** 
 * writes an index record - the index record is a set of name/value hashes, which are sent to Lucene.
 */
private static void writeItemIndex(Context c,IndexWriter writer,Item myitem) throws SQLException, IOException {
  String location_text=buildItemLocationString(c,myitem);
  ArrayList indexes=new ArrayList();
  for (int i=1; ConfigurationManager.getProperty("String_Node_Str" + i) != null; i++) {
    indexes.add(ConfigurationManager.getProperty("String_Node_Str" + i));
  }
  int j, k=0;
  HashMap textvalues=new HashMap();
  if (indexes.size() > 0) {
    ArrayList fields=new ArrayList();
    ArrayList content=new ArrayList();
    DCValue[] mydc;
    for (int i=0; i < indexes.size(); i++) {
      String index=(String)indexes.get(i);
      String dc[]=index.split("String_Node_Str");
      String myindex=dc[0];
      String elements[]=dc[1].split("String_Node_Str");
      String element=elements[0];
      String qualifier=elements[1];
      if (qualifier.equals("String_Node_Str")) {
        mydc=myitem.getDC(element,Item.ANY,Item.ANY);
      }
 else {
        mydc=myitem.getDC(element,qualifier,Item.ANY);
      }
      String content_text="String_Node_Str";
      for (j=0; j < mydc.length; j++) {
        content_text=new String(content_text + mydc[j].value + "String_Node_Str");
      }
      k=fields.indexOf(myindex);
      if (k < 0) {
        fields.add(myindex);
        content.add(content_text);
      }
 else {
        content_text=new String(content_text + (String)content.get(k) + "String_Node_Str");
        content.set(k,content_text);
      }
    }
    for (int i=0; i < fields.size(); i++) {
      textvalues.put((String)fields.get(i),(String)content.get(i));
    }
    textvalues.put("String_Node_Str",location_text);
  }
 else {
    DCValue[] authors=myitem.getDC("String_Node_Str",Item.ANY,Item.ANY);
    DCValue[] creators=myitem.getDC("String_Node_Str",Item.ANY,Item.ANY);
    DCValue[] titles=myitem.getDC("String_Node_Str",Item.ANY,Item.ANY);
    DCValue[] keywords=myitem.getDC("String_Node_Str",Item.ANY,Item.ANY);
    DCValue[] abstracts=myitem.getDC("String_Node_Str","String_Node_Str",Item.ANY);
    DCValue[] sors=myitem.getDC("String_Node_Str","String_Node_Str",Item.ANY);
    DCValue[] series=myitem.getDC("String_Node_Str","String_Node_Str",Item.ANY);
    DCValue[] tocs=myitem.getDC("String_Node_Str","String_Node_Str",Item.ANY);
    DCValue[] mimetypes=myitem.getDC("String_Node_Str","String_Node_Str",Item.ANY);
    DCValue[] sponsors=myitem.getDC("String_Node_Str","String_Node_Str",Item.ANY);
    DCValue[] identifiers=myitem.getDC("String_Node_Str",Item.ANY,Item.ANY);
    String author_text="String_Node_Str";
    String title_text="String_Node_Str";
    String keyword_text="String_Node_Str";
    String abstract_text="String_Node_Str";
    String sor_text="String_Node_Str";
    String series_text="String_Node_Str";
    String mime_text="String_Node_Str";
    String sponsor_text="String_Node_Str";
    String id_text="String_Node_Str";
    for (j=0; j < authors.length; j++) {
      author_text=new String(author_text + authors[j].value + "String_Node_Str");
    }
    for (j=0; j < creators.length; j++) {
      author_text=new String(author_text + creators[j].value + "String_Node_Str");
    }
    for (j=0; j < sors.length; j++) {
      author_text=new String(author_text + sors[j].value + "String_Node_Str");
    }
    for (j=0; j < titles.length; j++) {
      title_text=new String(title_text + titles[j].value + "String_Node_Str");
    }
    for (j=0; j < keywords.length; j++) {
      keyword_text=new String(keyword_text + keywords[j].value + "String_Node_Str");
    }
    for (j=0; j < abstracts.length; j++) {
      abstract_text=new String(abstract_text + abstracts[j].value + "String_Node_Str");
    }
    for (j=0; j < tocs.length; j++) {
      abstract_text=new String(abstract_text + tocs[j].value + "String_Node_Str");
    }
    for (j=0; j < series.length; j++) {
      series_text=new String(series_text + series[j].value + "String_Node_Str");
    }
    for (j=0; j < mimetypes.length; j++) {
      mime_text=new String(mime_text + mimetypes[j].value + "String_Node_Str");
    }
    for (j=0; j < sponsors.length; j++) {
      sponsor_text=new String(sponsor_text + sponsors[j].value + "String_Node_Str");
    }
    for (j=0; j < identifiers.length; j++) {
      id_text=new String(id_text + identifiers[j].value + "String_Node_Str");
    }
    textvalues.put("String_Node_Str",author_text);
    textvalues.put("String_Node_Str",title_text);
    textvalues.put("String_Node_Str",keyword_text);
    textvalues.put("String_Node_Str",location_text);
    textvalues.put("String_Node_Str",abstract_text);
    textvalues.put("String_Node_Str",series_text);
    textvalues.put("String_Node_Str",mime_text);
    textvalues.put("String_Node_Str",sponsor_text);
    textvalues.put("String_Node_Str",id_text);
  }
  String extractedText="String_Node_Str";
  Bundle[] myBundles=myitem.getBundles();
  for (int i=0; i < myBundles.length; i++) {
    if (myBundles[i].getName() != null && myBundles[i].getName().equals("String_Node_Str")) {
      Bitstream[] myBitstreams=myBundles[i].getBitstreams();
      for (j=0; j < myBitstreams.length; j++) {
        try {
          InputStreamReader is=new InputStreamReader(myBitstreams[j].retrieve());
          StringBuffer sb=new StringBuffer();
          char[] charBuffer=new char[1024];
          while (true) {
            int bytesIn=is.read(charBuffer);
            if (bytesIn == -1)             break;
            if (bytesIn > 0) {
              sb.append(charBuffer,0,bytesIn);
            }
          }
          extractedText=extractedText.concat(new String(sb));
        }
 catch (        AuthorizeException e) {
        }
      }
    }
  }
  String itemhandle=HandleManager.findHandle(c,myitem);
  textvalues.put("String_Node_Str",itemhandle);
  writeIndexRecord(writer,Constants.ITEM,itemhandle,textvalues,extractedText);
}