Program: 72767
Project: 72767
Buggy source:
public void startContainer(IContent content,boolean isFirst,IContentEmitter emitter,boolean visible){
switch (content.getContentType()) {
case IContent.TABLE_CONTENT:
    nestCount++;
  ITableContent table=(ITableContent)content;
boolean hasPageBreak=hasPageBreak(table);
if (hasPageBreak) {
if (currentTableIndex < 0) {
  IContent[] contentList=currentBuffer.getContentStack();
  pageBreakIndexs=getPageBreakIndex(table);
  currentBuffer.startContainer(createTable(table,pageBreakIndexs,0),isFirst,emitter,visible);
  currentTableIndex=nestCount;
  buffers=new IPageBuffer[pageBreakIndexs.length];
  buffers[0]=currentBuffer;
  String tableId=table.getInstanceID().toUniqueString();
  currentBuffer.addTableColumnHint(new TableColumnHint(tableId,0,pageBreakIndexs[0] + 1));
  for (int i=1; i < pageBreakIndexs.length; i++) {
    buffers[i]=new TableBreakBuffer(null,context);
    IContent[] list=new IContent[contentList.length + 1];
    list[0]=createTable(table,pageBreakIndexs,i);
    for (int j=0; j < contentList.length; j++) {
      list[j + 1]=contentList[j];
    }
    buffers[i].openPage(list,emitter);
    buffers[i].addTableColumnHint(new TableColumnHint(tableId,pageBreakIndexs[i - 1] + 1,pageBreakIndexs[i] - pageBreakIndexs[i - 1]));
  }
}
 else {
  currentBuffer.startContainer(content,isFirst,emitter,visible);
}
}
 else {
currentBuffer.startContainer(content,isFirst,emitter,visible);
}
break;
case IContent.TABLE_GROUP_CONTENT:
case IContent.TABLE_BAND_CONTENT:
case IContent.ROW_CONTENT:
if (currentTableIndex == nestCount && currentTableIndex > 0) {
currentIndex=0;
currentBuffer=buffers[0];
startContainerInPages(content,isFirst,emitter,visible);
}
 else {
currentBuffer.startContainer(content,isFirst,emitter,visible);
}
break;
default :
currentBuffer.startContainer(content,isFirst,emitter,visible);
break;
}
}

Fixed version (ground truth):
public void startContainer(IContent content,boolean isFirst,IContentEmitter emitter,boolean visible){
switch (content.getContentType()) {
case IContent.TABLE_CONTENT:
    nestCount++;
  ITableContent table=(ITableContent)content;
boolean hasPageBreak=hasPageBreak(table);
if (hasPageBreak) {
if (currentTableIndex < 0) {
  IContent[] contentList=currentBuffer.getContentStack();
  pageBreakIndexs=getPageBreakIndex(table);
  currentBuffer.startContainer(createTable(table,pageBreakIndexs,0),isFirst,emitter,visible);
  currentTableIndex=nestCount;
  buffers=new IPageBuffer[pageBreakIndexs.length];
  buffers[0]=currentBuffer;
  String tableId=table.getInstanceID().toUniqueString();
  currentBuffer.addTableColumnHint(new TableColumnHint(tableId,0,pageBreakIndexs[0] + 1));
  for (int i=1; i < pageBreakIndexs.length; i++) {
    buffers[i]=new TableBreakBuffer(null,context);
    IContent[] list=new IContent[contentList.length + 1];
    list[0]=createTable(table,pageBreakIndexs,i);
    for (int j=0; j < contentList.length; j++) {
      list[j + 1]=contentList[j];
    }
    buffers[i].openPage(list,emitter);
    buffers[i].addTableColumnHint(new TableColumnHint(tableId,pageBreakIndexs[i - 1] + 1,pageBreakIndexs[i] - pageBreakIndexs[i - 1]));
  }
}
 else {
  currentBuffer.startContainer(content,isFirst,emitter,visible);
}
}
 else {
currentBuffer.startContainer(content,isFirst,emitter,visible);
}
break;
case IContent.TABLE_GROUP_CONTENT:
case IContent.TABLE_BAND_CONTENT:
case IContent.ROW_CONTENT:
if (currentTableIndex == nestCount && currentTableIndex > 0) {
currentIndex=0;
currentBuffer=buffers[0];
startContainerInPages(content,isFirst,emitter,visible);
}
 else {
currentBuffer.startContainer(content,isFirst,emitter,visible);
}
break;
case IContent.CELL_CONTENT:
if (currentTableIndex == nestCount && currentTableIndex > 0) {
currentIndex=getPageIndex((ICellContent)content);
currentBuffer=buffers[currentIndex];
}
currentBuffer.startContainer(content,isFirst,emitter,visible);
break;
default :
currentBuffer.startContainer(content,isFirst,emitter,visible);
break;
}
}