Program: 75670
Project: 75670
Buggy source:
/** 
 * Checks out-of-range of each data point. If outside data is visible, adjust the coordinates; otherwise, clip the plot area. Note that coordinates array may be modified.
 * @param ipr renderer
 * @param srh SeriesRenderingHints
 * @param faX X coordinates
 * @param faY Y coordinates
 * @param bShowAsTape indicates if it's 2d+ chart
 */
protected final void handleOutsideDataPoints(final IPrimitiveRenderer ipr,final SeriesRenderingHints srh,final double[] faX,final double[] faY,final boolean bShowAsTape){
  final AutoScale scaleOrth=getInternalOrthogonalAxis().getScale();
  if ((scaleOrth.getType() & IConstants.PERCENT) == IConstants.PERCENT) {
    return;
  }
  final boolean bHideOutside=!isShowOutside();
  final DataPointHints[] dpha=srh.getDataPoints();
  final boolean isCategory=srh.isCategoryScale();
  final boolean bTransposed=isTransposed();
  final Bounds boClientArea=srh.getClientAreaBounds(true);
  if (bShowAsTape) {
    final double dSeriesThickness=srh.getSeriesThickness();
    boClientArea.delta(-dSeriesThickness,dSeriesThickness,0,0);
  }
  renderClipping(ipr,boClientArea);
  for (int i=0; i < dpha.length; i++) {
    if (!isCategory && dpha[i].getBaseValue() == null) {
      dpha[i].markOutside();
      continue;
    }
    int iOutside=0;
    if (dpha[i].getStackOrthogonalValue() != null) {
      double value=dpha[i].getStackOrthogonalValue().doubleValue();
      double min=Methods.asDouble(scaleOrth.getMinimum()).doubleValue();
      double max=Methods.asDouble(scaleOrth.getMaximum()).doubleValue();
      if (value < min) {
        iOutside=1;
      }
 else       if (value > max) {
        iOutside=2;
      }
    }
 else {
      iOutside=checkEntryByType(scaleOrth,dpha[i].getOrthogonalValue());
    }
    final OneAxis axisBase=getInternalBaseAxis();
    if (iOutside == 0 && !axisBase.isCategoryScale()) {
      iOutside=checkEntryByType(axisBase.getScale(),dpha[i].getBaseValue());
    }
    if (iOutside > 0) {
      if (bHideOutside) {
        dpha[i].markOutside();
      }
 else {
        if (bTransposed) {
          if (!Double.isNaN(faX[i])) {
            faX[i]=iOutside == 1 ? boClientArea.getLeft() : boClientArea.getLeft() + boClientArea.getWidth();
          }
        }
 else {
          if (!Double.isNaN(faY[i])) {
            faY[i]=iOutside == 1 ? boClientArea.getTop() + boClientArea.getHeight() : boClientArea.getTop();
          }
        }
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * Checks out-of-range of each data point. If outside data is visible, adjust the coordinates; otherwise, clip the plot area. Note that coordinates array may be modified.
 * @param ipr renderer
 * @param srh SeriesRenderingHints
 * @param faX X coordinates
 * @param faY Y coordinates
 * @param bShowAsTape indicates if it's 2d+ chart
 */
protected final void handleOutsideDataPoints(final IPrimitiveRenderer ipr,final SeriesRenderingHints srh,final double[] faX,final double[] faY,final boolean bShowAsTape){
  final AutoScale scaleOrth=getInternalOrthogonalAxis().getScale();
  final Bounds boClientArea=srh.getClientAreaBounds(true);
  if (bShowAsTape) {
    final double dSeriesThickness=srh.getSeriesThickness();
    boClientArea.delta(-dSeriesThickness,dSeriesThickness,0,0);
  }
  renderClipping(ipr,boClientArea);
  if ((scaleOrth.getType() & IConstants.PERCENT) == IConstants.PERCENT) {
    return;
  }
  final boolean bHideOutside=!isShowOutside();
  final DataPointHints[] dpha=srh.getDataPoints();
  final boolean isCategory=srh.isCategoryScale();
  final boolean bTransposed=isTransposed();
  for (int i=0; i < dpha.length; i++) {
    if (!isCategory && dpha[i].getBaseValue() == null) {
      dpha[i].markOutside();
      continue;
    }
    int iOutside=0;
    if (dpha[i].getStackOrthogonalValue() != null) {
      double value=dpha[i].getStackOrthogonalValue().doubleValue();
      double min=Methods.asDouble(scaleOrth.getMinimum()).doubleValue();
      double max=Methods.asDouble(scaleOrth.getMaximum()).doubleValue();
      if (value < min) {
        iOutside=1;
      }
 else       if (value > max) {
        iOutside=2;
      }
    }
 else {
      iOutside=checkEntryByType(scaleOrth,dpha[i].getOrthogonalValue());
    }
    final OneAxis axisBase=getInternalBaseAxis();
    if (iOutside == 0 && !axisBase.isCategoryScale()) {
      iOutside=checkEntryByType(axisBase.getScale(),dpha[i].getBaseValue());
    }
    if (iOutside > 0) {
      if (bHideOutside) {
        dpha[i].markOutside();
      }
 else {
        if (bTransposed) {
          if (!Double.isNaN(faX[i])) {
            faX[i]=iOutside == 1 ? boClientArea.getLeft() : boClientArea.getLeft() + boClientArea.getWidth();
          }
        }
 else {
          if (!Double.isNaN(faY[i])) {
            faY[i]=iOutside == 1 ? boClientArea.getTop() + boClientArea.getHeight() : boClientArea.getTop();
          }
        }
      }
    }
  }
}