Program: 58897
Project: 58897
Buggy source:
/** 
 * The pmlcluster routine performs clustering using pairwise maximum- (complete-) linking on the given distance matrix.
 * @param set
 * @return index of virtual array
 */
public Integer pmlcluster(){
  int[] clusterid=new int[iNrSamples];
  Node[] result=new Node[iNrSamples - 1];
  for (int j=0; j < iNrSamples; j++)   clusterid[j]=j;
  ArrayList<Integer> AlIndexes=new ArrayList<Integer>();
  int j;
  ClosestPair pair=null;
  float[][] distmatrix=new float[iNrSamples][iNrSamples];
  distmatrix=similarities.clone();
  for (int n=iNrSamples; n > 1; n--) {
    int is=1;
    int js=0;
    pair=find_closest_pair(n,distmatrix);
    if (pair.update) {
      is=pair.x;
      js=pair.y;
    }
    for (j=0; j < js; j++)     distmatrix[js][j]=Math.max(distmatrix[is][j],distmatrix[js][j]);
    for (j=js + 1; j < is; j++)     distmatrix[j][js]=Math.max(distmatrix[is][j],distmatrix[j][js]);
    for (j=is + 1; j < n; j++)     distmatrix[j][js]=Math.max(distmatrix[j][is],distmatrix[j][js]);
    for (j=0; j < is; j++)     distmatrix[is][j]=distmatrix[n - 1][j];
    for (j=is + 1; j < n - 1; j++)     distmatrix[j][is]=distmatrix[n - 1][j];
    Node node=new Node();
    node.setCorrelation(pair.correlation);
    node.setLeft(clusterid[is]);
    node.setRight(clusterid[js]);
    result[iNrSamples - n]=node;
    clusterid[js]=n - iNrSamples - 1;
    clusterid[is]=clusterid[n - 1];
  }
  tree=new Tree<ClusterNode>();
  ClusterNode node=new ClusterNode("String_Node_Str",1,0f,0);
  tree.setRootNode(node);
  treeStructureToTree(node,result,result.length - 1);
  ClusterHelper.determineNrElements(tree);
  ClusterHelper.determineHierarchyDepth(tree);
  AlIndexes=getAl();
  set.setClusteredTree(tree);
  Integer clusteredVAId=set.createStorageVA(AlIndexes);
  return clusteredVAId;
}

Fixed version (ground truth):
/** 
 * The pmlcluster routine performs clustering using pairwise maximum- (complete-) linking on the given distance matrix.
 * @param set
 * @return index of virtual array
 */
public Integer pmlcluster(){
  int[] clusterid=new int[iNrSamples];
  Node[] result=new Node[iNrSamples - 1];
  for (int j=0; j < iNrSamples; j++)   clusterid[j]=j;
  ArrayList<Integer> AlIndexes=new ArrayList<Integer>();
  int j;
  ClosestPair pair=null;
  float[][] distmatrix=new float[iNrSamples][iNrSamples];
  distmatrix=similarities.clone();
  for (int n=iNrSamples; n > 1; n--) {
    int is=1;
    int js=0;
    pair=find_closest_pair(n,distmatrix);
    if (pair.update) {
      is=pair.x;
      js=pair.y;
    }
    for (j=0; j < js; j++)     distmatrix[js][j]=Math.max(distmatrix[is][j],distmatrix[js][j]);
    for (j=js + 1; j < is; j++)     distmatrix[j][js]=Math.max(distmatrix[is][j],distmatrix[j][js]);
    for (j=is + 1; j < n; j++)     distmatrix[j][js]=Math.max(distmatrix[j][is],distmatrix[j][js]);
    for (j=0; j < is; j++)     distmatrix[is][j]=distmatrix[n - 1][j];
    for (j=is + 1; j < n - 1; j++)     distmatrix[j][is]=distmatrix[n - 1][j];
    Node node=new Node();
    node.setCorrelation(pair.correlation);
    node.setLeft(clusterid[is]);
    node.setRight(clusterid[js]);
    result[iNrSamples - n]=node;
    clusterid[js]=n - iNrSamples - 1;
    clusterid[is]=clusterid[n - 1];
  }
  tree=new Tree<ClusterNode>();
  ClusterNode node=new ClusterNode("String_Node_Str",0,0f,0);
  tree.setRootNode(node);
  treeStructureToTree(node,result,result.length - 1);
  ClusterHelper.determineNrElements(tree);
  ClusterHelper.determineHierarchyDepth(tree);
  AlIndexes=getAl();
  set.setClusteredTree(tree);
  Integer clusteredVAId=set.createStorageVA(AlIndexes);
  return clusteredVAId;
}