Program: 69009
Project: 69009
Buggy source:
/** 
 * 1) Creates row wrapper. 2) For the null cell in the row wrapper, fills the relevant position with dummy cell or empty cell. 3) Updates the height of the row and the cells in the row.
 * @param rowArea current rowArea.
 */
private void updateRow(RowArea rowArea,boolean isFixedLayout){
  RowArea lastRow=(RowArea)rows.getCurrent();
  boolean usedResolvedRow=false;
  int height=rowArea.getSpecifiedHeight();
  if (!isFixedLayout || height == 0) {
    for (int i=startCol; i <= endCol; i++) {
      CellArea upperCell=null;
      if (lastRow != null) {
        upperCell=lastRow.getCell(i);
      }
      if (upperCell != null && (upperCell.getRowSpan() > 1)) {
        if (rowArea.cells[i] != null) {
          rowArea.removeChild(rowArea.cells[i]);
        }
        DummyCell dummyCell=createDummyCell(upperCell);
        rowArea.setCell(dummyCell);
        int delta=dummyCell.getDelta();
        if (dummyCell.getRowSpan() == 1) {
          height=Math.max(height,dummyCell.getCell().getHeight() - delta);
        }
        i=i + upperCell.getColSpan() - 1;
      }
 else {
        CellArea cell=rowArea.getCell(i);
        if (cell == null) {
          if (unresolvedRow != null) {
            upperCell=unresolvedRow.getCell(i);
            usedResolvedRow=true;
          }
          if (upperCell != null) {
            cell=createEmptyCell(upperCell,i,rowArea,lastRow);
          }
        }
        if (cell != null && cell.getRowSpan() == 1) {
          height=Math.max(height,cell.getHeight());
          i=i + cell.getColSpan() - 1;
        }
      }
    }
  }
 else {
    for (int i=startCol; i <= endCol; i++) {
      CellArea upperCell=null;
      if (lastRow != null) {
        upperCell=lastRow.getCell(i);
      }
      if (upperCell != null && (upperCell.getRowSpan() > 1)) {
        DummyCell dummyCell=createDummyCell(upperCell);
        rowArea.setCell(dummyCell);
        i=i + upperCell.getColSpan() - 1;
      }
    }
  }
  if (usedResolvedRow) {
    unresolvedRow=null;
  }
  updateRowHeight(rowArea,height,isFixedLayout);
}

Fixed version (ground truth):
/** 
 * 1) Creates row wrapper. 2) For the null cell in the row wrapper, fills the relevant position with dummy cell or empty cell. 3) Updates the height of the row and the cells in the row.
 * @param rowArea current rowArea.
 */
private void updateRow(RowArea rowArea,boolean isFixedLayout){
  RowArea lastRow=(RowArea)rows.getCurrent();
  boolean usedResolvedRow=false;
  int height=rowArea.getSpecifiedHeight();
  if (!isFixedLayout || height == 0) {
    for (int i=startCol; i <= endCol; i++) {
      CellArea upperCell=null;
      if (lastRow != null) {
        upperCell=lastRow.getCell(i);
      }
      if (upperCell != null && (upperCell.getRowSpan() > 1)) {
        if (rowArea.cells[i] != null) {
          rowArea.removeChild(rowArea.cells[i]);
        }
        DummyCell dummyCell=createDummyCell(upperCell);
        rowArea.setCell(dummyCell);
        int delta=dummyCell.getDelta();
        if (dummyCell.getRowSpan() == 1) {
          height=Math.max(height,dummyCell.getCell().getHeight() - delta);
        }
        i=i + upperCell.getColSpan() - 1;
      }
 else {
        CellArea cell=rowArea.getCell(i);
        if (cell == null) {
          if (unresolvedRow != null) {
            upperCell=unresolvedRow.getCell(i);
            usedResolvedRow=true;
          }
          if (upperCell != null) {
            cell=createEmptyCell(upperCell,i,rowArea,lastRow);
          }
        }
        if (cell != null && cell.getRowSpan() == 1) {
          height=Math.max(height,cell.getHeight());
          i=i + cell.getColSpan() - 1;
        }
      }
    }
  }
 else {
    for (int i=startCol; i <= endCol; i++) {
      CellArea upperCell=null;
      if (lastRow != null) {
        upperCell=lastRow.getCell(i);
      }
      if (upperCell != null && (upperCell.getRowSpan() > 1)) {
        DummyCell dummyCell=createDummyCell(upperCell);
        rowArea.setCell(dummyCell);
        i=i + upperCell.getColSpan() - 1;
      }
 else {
        CellArea cell=rowArea.getCell(i);
        if (cell == null) {
          if (unresolvedRow != null) {
            upperCell=unresolvedRow.getCell(i);
            usedResolvedRow=true;
          }
          if (upperCell != null) {
            cell=createEmptyCell(upperCell,i,rowArea,lastRow);
          }
        }
        if (cell != null && cell.getRowSpan() == 1) {
          i=i + cell.getColSpan() - 1;
        }
      }
    }
  }
  if (usedResolvedRow) {
    unresolvedRow=null;
  }
  updateRowHeight(rowArea,height,isFixedLayout);
}