Program: 156779
Project: 156779
Buggy source:
/** 
 * Make the column visit list: called once per layer
 */
private void createColumnVisitList(){
  visitList.clear();
  Integer[][] columnHeights=new Integer[builder.blueprint.sizeX - 2][builder.blueprint.sizeZ - 2];
  boolean[][] blockedColumns=new boolean[builder.blueprint.sizeX - 2][builder.blueprint.sizeZ - 2];
  for (int searchY=yCoord + 3; searchY >= 0; --searchY) {
    int startX, endX, incX;
    if (searchY % 2 == 0) {
      startX=0;
      endX=builder.blueprint.sizeX - 2;
      incX=1;
    }
 else {
      startX=builder.blueprint.sizeX - 3;
      endX=-1;
      incX=-1;
    }
    for (int searchX=startX; searchX != endX; searchX+=incX) {
      int startZ, endZ, incZ;
      if (searchX % 2 == searchY % 2) {
        startZ=0;
        endZ=builder.blueprint.sizeZ - 2;
        incZ=1;
      }
 else {
        startZ=builder.blueprint.sizeZ - 3;
        endZ=-1;
        incZ=-1;
      }
      for (int searchZ=startZ; searchZ != endZ; searchZ+=incZ) {
        if (!blockedColumns[searchX][searchZ]) {
          Integer height=columnHeights[searchX][searchZ];
          int bx=box.xMin + searchX + 1, by=searchY, bz=box.zMin + searchZ + 1;
          if (height == null) {
            columnHeights[searchX][searchZ]=height=worldObj.getHeightValue(bx,bz);
          }
          if (height > 0 && height < by && worldObj.provider.dimensionId != -1) {
            continue;
          }
          Block block=worldObj.getBlock(bx,by,bz);
          if (!BlockUtils.canChangeBlock(block,worldObj,bx,by,bz)) {
            blockedColumns[searchX][searchZ]=true;
            if (height == 0) {
              columnHeights[searchX][searchZ]=by;
            }
          }
 else           if (BlockUtils.isAnObstructingBlock(block,worldObj,bx,by,bz)) {
            visitList.add(new int[]{bx,by,bz});
          }
          if (visitList.size() > builder.blueprint.sizeZ * builder.blueprint.sizeX * 2) {
            return;
          }
        }
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * Make the column visit list: called once per layer
 */
private void createColumnVisitList(){
  visitList.clear();
  Integer[][] columnHeights=new Integer[builder.blueprint.sizeX - 2][builder.blueprint.sizeZ - 2];
  boolean[][] blockedColumns=new boolean[builder.blueprint.sizeX - 2][builder.blueprint.sizeZ - 2];
  for (int searchY=yCoord + 3; searchY >= 0; --searchY) {
    int startX, endX, incX;
    if (searchY % 2 == 0) {
      startX=0;
      endX=builder.blueprint.sizeX - 2;
      incX=1;
    }
 else {
      startX=builder.blueprint.sizeX - 3;
      endX=-1;
      incX=-1;
    }
    for (int searchX=startX; searchX != endX; searchX+=incX) {
      int startZ, endZ, incZ;
      if (searchX % 2 == searchY % 2) {
        startZ=0;
        endZ=builder.blueprint.sizeZ - 2;
        incZ=1;
      }
 else {
        startZ=builder.blueprint.sizeZ - 3;
        endZ=-1;
        incZ=-1;
      }
      for (int searchZ=startZ; searchZ != endZ; searchZ+=incZ) {
        if (!blockedColumns[searchX][searchZ]) {
          Integer height=columnHeights[searchX][searchZ];
          int bx=box.xMin + searchX + 1, by=searchY, bz=box.zMin + searchZ + 1;
          if (height == null) {
            columnHeights[searchX][searchZ]=height=worldObj.getHeightValue(bx,bz);
          }
          if (height > 0 && height < by && worldObj.provider.dimensionId != -1) {
            continue;
          }
          Block block=worldObj.getBlock(bx,by,bz);
          if (!BlockUtils.canChangeBlock(block,worldObj,bx,by,bz)) {
            blockedColumns[searchX][searchZ]=true;
          }
 else           if (!BuildCraftAPI.isSoftBlock(worldObj,bx,by,bz)) {
            visitList.add(new int[]{bx,by,bz});
          }
          if (height == 0 && !worldObj.isAirBlock(bx,by,bz)) {
            columnHeights[searchX][searchZ]=by;
          }
          if (visitList.size() > builder.blueprint.sizeZ * builder.blueprint.sizeX * 2) {
            return;
          }
        }
      }
    }
  }
}