Program: 146809
Project: 146809
Buggy source:
private void incrementHelper(Vector indexes,Vector multiplicities,Vector elements,boolean descend){
  int i=indexes.size() - 1;
  boolean exitRepeat=false;
  if (i == -1 || elements.elementAt(i) instanceof GroupDef) {
    if (i >= 0) {
      GroupDef group=(GroupDef)elements.elementAt(i);
      if (group.getRepeat()) {
        if (repeatStructure == REPEAT_STRUCTURE_NON_LINEAR) {
          if (((Integer)multiplicities.lastElement()).intValue() == TreeReference.INDEX_REPEAT_JUNCTURE) {
            descend=false;
            exitRepeat=true;
          }
        }
 else {
          if (form.getMainInstance().resolveReference(form.getChildInstanceRef(elements,multiplicities)) == null) {
            descend=false;
            exitRepeat=true;
          }
        }
      }
    }
    if (descend) {
      indexes.addElement(new Integer(0));
      multiplicities.addElement(new Integer(0));
      elements.addElement((i == -1 ? form : (IFormElement)elements.elementAt(i)).getChild(0));
      if (repeatStructure == REPEAT_STRUCTURE_NON_LINEAR) {
        if (elements.lastElement() instanceof GroupDef && ((GroupDef)elements.lastElement()).getRepeat()) {
          multiplicities.setElementAt(new Integer(TreeReference.INDEX_REPEAT_JUNCTURE),multiplicities.size() - 1);
        }
      }
      return;
    }
  }
  while (i >= 0) {
    if (!exitRepeat && elements.elementAt(i) instanceof GroupDef && ((GroupDef)elements.elementAt(i)).getRepeat()) {
      if (repeatStructure == REPEAT_STRUCTURE_NON_LINEAR) {
        multiplicities.setElementAt(new Integer(TreeReference.INDEX_REPEAT_JUNCTURE),i);
      }
 else {
        multiplicities.setElementAt(new Integer(((Integer)multiplicities.elementAt(i)).intValue() + 1),i);
      }
      return;
    }
    IFormElement parent=(i == 0 ? form : (IFormElement)elements.elementAt(i - 1));
    int curIndex=((Integer)indexes.elementAt(i)).intValue();
    if (curIndex + 1 >= parent.getChildren().size()) {
      indexes.removeElementAt(i);
      multiplicities.removeElementAt(i);
      elements.removeElementAt(i);
      i--;
      exitRepeat=false;
    }
 else {
      indexes.setElementAt(new Integer(curIndex + 1),i);
      multiplicities.setElementAt(new Integer(0),i);
      elements.setElementAt(parent.getChild(curIndex + 1),i);
      if (repeatStructure == REPEAT_STRUCTURE_NON_LINEAR) {
        if (elements.lastElement() instanceof GroupDef && ((GroupDef)elements.lastElement()).getRepeat()) {
          multiplicities.setElementAt(new Integer(TreeReference.INDEX_REPEAT_JUNCTURE),multiplicities.size() - 1);
        }
      }
      return;
    }
  }
}

Fixed version (ground truth):
private void incrementHelper(Vector indexes,Vector multiplicities,Vector elements,boolean descend){
  int i=indexes.size() - 1;
  boolean exitRepeat=false;
  if (i == -1 || elements.elementAt(i) instanceof GroupDef) {
    if (i >= 0) {
      GroupDef group=(GroupDef)elements.elementAt(i);
      if (group.getRepeat()) {
        if (repeatStructure == REPEAT_STRUCTURE_NON_LINEAR) {
          if (((Integer)multiplicities.lastElement()).intValue() == TreeReference.INDEX_REPEAT_JUNCTURE) {
            descend=false;
            exitRepeat=true;
          }
        }
 else {
          if (form.getMainInstance().resolveReference(form.getChildInstanceRef(elements,multiplicities)) == null) {
            descend=false;
            exitRepeat=true;
          }
        }
      }
    }
    if (descend && (i == -1 || ((IFormElement)elements.elementAt(i)).getChildren().size() > 0)) {
      indexes.addElement(new Integer(0));
      multiplicities.addElement(new Integer(0));
      elements.addElement((i == -1 ? form : (IFormElement)elements.elementAt(i)).getChild(0));
      if (repeatStructure == REPEAT_STRUCTURE_NON_LINEAR) {
        if (elements.lastElement() instanceof GroupDef && ((GroupDef)elements.lastElement()).getRepeat()) {
          multiplicities.setElementAt(new Integer(TreeReference.INDEX_REPEAT_JUNCTURE),multiplicities.size() - 1);
        }
      }
      return;
    }
  }
  while (i >= 0) {
    if (!exitRepeat && elements.elementAt(i) instanceof GroupDef && ((GroupDef)elements.elementAt(i)).getRepeat()) {
      if (repeatStructure == REPEAT_STRUCTURE_NON_LINEAR) {
        multiplicities.setElementAt(new Integer(TreeReference.INDEX_REPEAT_JUNCTURE),i);
      }
 else {
        multiplicities.setElementAt(new Integer(((Integer)multiplicities.elementAt(i)).intValue() + 1),i);
      }
      return;
    }
    IFormElement parent=(i == 0 ? form : (IFormElement)elements.elementAt(i - 1));
    int curIndex=((Integer)indexes.elementAt(i)).intValue();
    if (curIndex + 1 >= parent.getChildren().size()) {
      indexes.removeElementAt(i);
      multiplicities.removeElementAt(i);
      elements.removeElementAt(i);
      i--;
      exitRepeat=false;
    }
 else {
      indexes.setElementAt(new Integer(curIndex + 1),i);
      multiplicities.setElementAt(new Integer(0),i);
      elements.setElementAt(parent.getChild(curIndex + 1),i);
      if (repeatStructure == REPEAT_STRUCTURE_NON_LINEAR) {
        if (elements.lastElement() instanceof GroupDef && ((GroupDef)elements.lastElement()).getRepeat()) {
          multiplicities.setElementAt(new Integer(TreeReference.INDEX_REPEAT_JUNCTURE),multiplicities.size() - 1);
        }
      }
      return;
    }
  }
}