Program: 29255
Project: 29255
Buggy source:
private static void reclaim(@NotNull final PatriciaReclaimSourceTraverser source,@NotNull final PatriciaReclaimActualTraverser actual){
  final NodeBase actualNode=actual.currentNode;
  final NodeBase sourceNode=source.currentNode;
  if (actualNode.getAddress() == sourceNode.getAddress()) {
    actual.currentNode=actualNode.getMutableCopy(actual.mainTree);
    actual.getItr();
    actual.wasReclaim=true;
    reclaimActualChildren(source,actual);
  }
 else {
    @NotNull ByteIterator srcItr=sourceNode.keySequence.iterator();
    @NotNull ByteIterator actItr=actualNode.keySequence.iterator();
    int srcPushes=0;
    int actPushes=0;
    while (true) {
      if (srcItr.hasNext()) {
        if (actItr.hasNext()) {
          if (srcItr.next() != actItr.next()) {
            break;
          }
        }
 else {
          final NodeChildrenIterator children=actual.currentNode.getChildren(srcItr.next());
          final ChildReference child=children.getNode();
          if (child == null) {
            break;
          }
          actual.currentChild=child;
          actual.currentIterator=children;
          actual.moveDown();
          ++actPushes;
          actItr=actual.currentNode.keySequence.iterator();
        }
      }
 else       if (actItr.hasNext()) {
        final NodeChildrenIterator children=sourceNode.getChildren(actItr.next());
        final ChildReference child=children.getNode();
        if (child == null || !source.isAddressReclaimable(child.suffixAddress)) {
          break;
        }
        source.currentChild=child;
        source.currentIterator=children;
        source.moveDown();
        ++srcPushes;
        srcItr=sourceNode.keySequence.iterator();
      }
 else {
        reclaimChildren(source,actual);
        break;
      }
    }
    for (int i=0; i < srcPushes; ++i) {
      source.moveUp();
    }
    for (int i=0; i < actPushes; ++i) {
      actual.popAndMutate();
    }
  }
}

Fixed version (ground truth):
private static void reclaim(@NotNull final PatriciaReclaimSourceTraverser source,@NotNull final PatriciaReclaimActualTraverser actual){
  final NodeBase actualNode=actual.currentNode;
  final NodeBase sourceNode=source.currentNode;
  if (actualNode.getAddress() == sourceNode.getAddress()) {
    actual.currentNode=actualNode.getMutableCopy(actual.mainTree);
    actual.getItr();
    actual.wasReclaim=true;
    reclaimActualChildren(source,actual);
  }
 else {
    @NotNull ByteIterator srcItr=sourceNode.keySequence.iterator();
    @NotNull ByteIterator actItr=actualNode.keySequence.iterator();
    int srcPushes=0;
    int actPushes=0;
    while (true) {
      if (srcItr.hasNext()) {
        if (actItr.hasNext()) {
          if (srcItr.next() != actItr.next()) {
            break;
          }
        }
 else {
          final NodeChildrenIterator children=actual.currentNode.getChildren(srcItr.next());
          final ChildReference child=children.getNode();
          if (child == null) {
            break;
          }
          actual.currentChild=child;
          actual.currentIterator=children;
          actual.moveDown();
          ++actPushes;
          actItr=actual.currentNode.keySequence.iterator();
        }
      }
 else       if (actItr.hasNext()) {
        final NodeChildrenIterator children=source.currentNode.getChildren(actItr.next());
        final ChildReference child=children.getNode();
        if (child == null || !source.isAddressReclaimable(child.suffixAddress)) {
          break;
        }
        source.currentChild=child;
        source.currentIterator=children;
        source.moveDown();
        ++srcPushes;
        srcItr=source.currentNode.keySequence.iterator();
      }
 else {
        reclaimChildren(source,actual);
        break;
      }
    }
    for (int i=0; i < srcPushes; ++i) {
      source.moveUp();
    }
    for (int i=0; i < actPushes; ++i) {
      actual.popAndMutate();
    }
  }
}