Program: 56624
Project: 56624
Buggy source:
@Override public AutoFilter autoFilter(int field,Object criteria1,int filterOp,Object criteria2,boolean visibleDropDown){
  AutoFilter af=_sheet.getAutoFilter();
  if (af == null) {
    af=autoFilter();
  }
  final FilterColumn fc=BookHelper.getOrCreateFilterColumn(af,field - 1);
  BookHelper.setProperties(fc,criteria1,filterOp,criteria2,visibleDropDown);
  final CellRangeAddress affectedArea=af.getRangeAddress();
  final int row1=affectedArea.getFirstRow();
  final int col1=affectedArea.getFirstColumn();
  final int col=col1 + field - 1;
  final int row=row1 + 1;
  final int row2=affectedArea.getLastRow();
  final int col2=affectedArea.getLastColumn();
  final Set cr1=fc.getCriteria1();
  final Set<Ref> all=new HashSet<Ref>();
  for (int r=row1; r <= row2; ++r) {
    final Cell cell=BookHelper.getCell(_sheet,r,col);
    final String val=BookHelper.isBlankCell(cell) ? "String_Node_Str" : BookHelper.getCellText(cell);
    if (!cr1.contains(val)) {
      final Row rowobj=_sheet.getRow(r);
      if (rowobj == null || !rowobj.getZeroHeight()) {
        new RangeImpl(r,col,_sheet,_sheet).getRows().setHidden(true);
      }
    }
 else {
      final Row rowobj=_sheet.getRow(r);
      if (rowobj != null && rowobj.getZeroHeight() && canUnhide(af,fc,r,col1)) {
        final RangeImpl rng=(RangeImpl)new RangeImpl(r,col1,r,col2,_sheet,_sheet).getRows();
        all.addAll(rng.getRefs());
        rng.getRows().setHidden(false);
      }
    }
  }
  BookHelper.notifyCellChanges(_sheet.getBook(),all);
  final RangeImpl buttonChange=(RangeImpl)Ranges.range(_sheet,row1,col,row1,col);
  BookHelper.notifyBtnChanges(new HashSet<Ref>(buttonChange.getRefs()));
  return af;
}

Fixed version (ground truth):
@Override public AutoFilter autoFilter(int field,Object criteria1,int filterOp,Object criteria2,boolean visibleDropDown){
  AutoFilter af=_sheet.getAutoFilter();
  if (af == null) {
    af=autoFilter();
  }
  final FilterColumn fc=BookHelper.getOrCreateFilterColumn(af,field - 1);
  BookHelper.setProperties(fc,criteria1,filterOp,criteria2,visibleDropDown);
  final CellRangeAddress affectedArea=af.getRangeAddress();
  final int row1=affectedArea.getFirstRow();
  final int col1=affectedArea.getFirstColumn();
  final int col=col1 + field - 1;
  final int row=row1 + 1;
  final int row2=affectedArea.getLastRow();
  final int col2=affectedArea.getLastColumn();
  final Set cr1=fc.getCriteria1();
  final Set<Ref> all=new HashSet<Ref>();
  for (int r=row; r <= row2; ++r) {
    final Cell cell=BookHelper.getCell(_sheet,r,col);
    final String val=BookHelper.isBlankCell(cell) ? "String_Node_Str" : BookHelper.getCellText(cell);
    if (!cr1.contains(val)) {
      final Row rowobj=_sheet.getRow(r);
      if (rowobj == null || !rowobj.getZeroHeight()) {
        new RangeImpl(r,col,_sheet,_sheet).getRows().setHidden(true);
      }
    }
 else {
      final Row rowobj=_sheet.getRow(r);
      if (rowobj != null && rowobj.getZeroHeight() && canUnhide(af,fc,r,col1)) {
        final RangeImpl rng=(RangeImpl)new RangeImpl(r,col1,r,col2,_sheet,_sheet).getRows();
        all.addAll(rng.getRefs());
        rng.getRows().setHidden(false);
      }
    }
  }
  BookHelper.notifyCellChanges(_sheet.getBook(),all);
  final RangeImpl buttonChange=(RangeImpl)Ranges.range(_sheet,row1,col,row1,col);
  BookHelper.notifyBtnChanges(new HashSet<Ref>(buttonChange.getRefs()));
  return af;
}