Program: 72104
Project: 72104
Buggy source:
public void updateRow(RowArea rowArea,int specifiedHeight){
  Row lastRow=getPreviousRow();
  Row row=new Row(rowArea,startCol,endCol);
  int height=specifiedHeight;
  CellArea previousCellArea=null;
  for (int i=startCol; i <= endCol; i++) {
    CellArea lastCell=null;
    if (lastRow != null) {
      lastCell=lastRow.getCell(i);
    }
    CellArea cell=row.getCell(i);
    if (lastCell != null && (lastCell.getRowSpan() > 1)) {
      if (lastCell.getRowSpan() == 2) {
        if (lastCell instanceof DummyCell) {
          height=Math.max(height,lastCell.getHeight());
        }
 else {
          height=Math.max(height,lastCell.getHeight() - lastRow.getArea().getHeight());
        }
      }
      i=i + lastCell.getColSpan() - 1;
    }
 else {
      if (cell != null) {
        if (cell.getRowSpan() == 1) {
          height=Math.max(height,cell.getHeight());
        }
        if (!(cell instanceof DummyCell)) {
          previousCellArea=cell;
        }
      }
      if (cell == null) {
        ICellContent cellContent=null;
        int rowSpan=1;
        if (unresolvedRow != null) {
          lastCell=unresolvedRow.getCell(i);
          if (lastCell != null) {
            cellContent=(ICellContent)lastCell.getContent();
            rowSpan=lastCell.getRowSpan();
          }
        }
        if (cellContent == null) {
          cellContent=tableContent.getReportContent().createCellContent();
          cellContent.setColumn(i);
          cellContent.setColSpan(1);
          cellContent.setRowSpan(1);
          cellContent.setParent(rowArea.getContent());
        }
        int startColumn=cellContent.getColumn();
        int endColumn=cellContent.getColSpan() + startColumn;
        CellArea emptyCell=AreaFactory.createCellArea(cellContent);
        resolveBorderConflict(emptyCell,true);
        IStyle areaStyle=emptyCell.getStyle();
        areaStyle.setProperty(IStyle.STYLE_PADDING_TOP,IStyle.NUMBER_0);
        areaStyle.setProperty(IStyle.STYLE_MARGIN_TOP,IStyle.NUMBER_0);
        emptyCell.setWidth(getCellWidth(startColumn,endColumn));
        emptyCell.setPosition(layoutInfo.getXPosition(i),0);
        if (previousCellArea != null) {
          int index=rowArea.indexOf(previousCellArea);
          rowArea.addChild(index,emptyCell);
        }
 else {
          rowArea.addChild(0,emptyCell);
        }
        i=i + emptyCell.getColSpan() - 1;
      }
    }
  }
  if (height >= 0) {
    Iterator iter=rowArea.getChildren();
    while (iter.hasNext()) {
      CellArea cell=(CellArea)iter.next();
      if (cell.getRowSpan() == 1) {
        cell.setHeight(height);
        verticalAlign(cell);
      }
    }
    rowArea.setHeight(height);
  }
}

Fixed version (ground truth):
public void updateRow(RowArea rowArea,int specifiedHeight){
  Row lastRow=getPreviousRow();
  Row row=new Row(rowArea,startCol,endCol);
  int height=specifiedHeight;
  CellArea previousCellArea=null;
  for (int i=startCol; i <= endCol; i++) {
    CellArea lastCell=null;
    if (lastRow != null) {
      lastCell=lastRow.getCell(i);
    }
    CellArea cell=row.getCell(i);
    if (lastCell != null && (lastCell.getRowSpan() > 1)) {
      if (lastCell.getRowSpan() == 2) {
        if (lastCell instanceof DummyCell) {
          height=Math.max(height,lastCell.getHeight());
        }
 else {
          height=Math.max(height,lastCell.getHeight() - lastRow.getArea().getHeight());
        }
      }
      i=i + lastCell.getColSpan() - 1;
    }
 else {
      if (cell != null) {
        if (cell.getRowSpan() == 1) {
          height=Math.max(height,cell.getHeight());
        }
        if (!(cell instanceof DummyCell)) {
          previousCellArea=cell;
        }
      }
      if (cell == null) {
        ICellContent cellContent=null;
        int rowSpan=1;
        if (unresolvedRow != null) {
          lastCell=unresolvedRow.getCell(i);
          if (lastCell != null) {
            cellContent=(ICellContent)lastCell.getContent();
            rowSpan=lastCell.getRowSpan();
          }
        }
        if (cellContent == null) {
          cellContent=tableContent.getReportContent().createCellContent();
          cellContent.setColumn(i);
          cellContent.setColSpan(1);
          cellContent.setRowSpan(1);
          cellContent.setParent(rowArea.getContent());
        }
        int startColumn=cellContent.getColumn();
        int endColumn=cellContent.getColSpan() + startColumn;
        CellArea emptyCell=AreaFactory.createCellArea(cellContent);
        if (previousCellArea != null) {
          lastCellContent=(ICellContent)previousCellArea.getContent();
        }
        resolveBorderConflict(emptyCell,true);
        IStyle areaStyle=emptyCell.getStyle();
        areaStyle.setProperty(IStyle.STYLE_PADDING_TOP,IStyle.NUMBER_0);
        areaStyle.setProperty(IStyle.STYLE_MARGIN_TOP,IStyle.NUMBER_0);
        emptyCell.setWidth(getCellWidth(startColumn,endColumn));
        emptyCell.setPosition(layoutInfo.getXPosition(i),0);
        if (previousCellArea != null) {
          int index=rowArea.indexOf(previousCellArea);
          rowArea.addChild(index + 1,emptyCell);
        }
 else {
          rowArea.addChild(0,emptyCell);
        }
        i=i + emptyCell.getColSpan() - 1;
      }
    }
  }
  if (height >= 0) {
    Iterator iter=rowArea.getChildren();
    while (iter.hasNext()) {
      CellArea cell=(CellArea)iter.next();
      if (cell.getRowSpan() == 1) {
        cell.setHeight(height);
        verticalAlign(cell);
      }
    }
    rowArea.setHeight(height);
  }
}