Program: 18407
Project: 18407
Buggy source:
@Override public void drawHighlighted(Canvas c,Highlight[] indices){
  BubbleData bubbleData=mChart.getBubbleData();
  float phaseX=mAnimator.getPhaseX();
  float phaseY=mAnimator.getPhaseY();
  for (  Highlight indice : indices) {
    BubbleDataSet dataSet=bubbleData.getDataSetByIndex(indice.getDataSetIndex());
    if (dataSet == null || !dataSet.isHighlightEnabled())     continue;
    Entry entryFrom=dataSet.getEntryForXIndex(mMinX);
    Entry entryTo=dataSet.getEntryForXIndex(mMaxX);
    int minx=dataSet.getEntryPosition(entryFrom);
    int maxx=Math.min(dataSet.getEntryPosition(entryTo) + 1,dataSet.getEntryCount());
    final BubbleEntry entry=(BubbleEntry)bubbleData.getEntryForHighlight(indice);
    Transformer trans=mChart.getTransformer(dataSet.getAxisDependency());
    sizeBuffer[0]=0f;
    sizeBuffer[2]=1f;
    trans.pointValuesToPixel(sizeBuffer);
    final float maxBubbleWidth=Math.abs(sizeBuffer[2] - sizeBuffer[0]);
    final float maxBubbleHeight=Math.abs(mViewPortHandler.contentBottom() - mViewPortHandler.contentTop());
    final float referenceSize=Math.min(maxBubbleHeight,maxBubbleWidth);
    pointBuffer[0]=(float)(entry.getXIndex() - minx) * phaseX + (float)minx;
    pointBuffer[1]=(float)(entry.getVal()) * phaseY;
    trans.pointValuesToPixel(pointBuffer);
    float shapeHalf=getShapeSize(entry.getSize(),dataSet.getMaxSize(),referenceSize) / 2f;
    if (!mViewPortHandler.isInBoundsTop(pointBuffer[1] + shapeHalf) || !mViewPortHandler.isInBoundsBottom(pointBuffer[1] - shapeHalf))     continue;
    if (!mViewPortHandler.isInBoundsLeft(pointBuffer[0] + shapeHalf))     continue;
    if (!mViewPortHandler.isInBoundsRight(pointBuffer[0] - shapeHalf))     break;
    if (indice.getXIndex() < minx || indice.getXIndex() >= maxx)     continue;
    final int originalColor=dataSet.getColor(entry.getXIndex());
    Color.RGBToHSV(Color.red(originalColor),Color.green(originalColor),Color.blue(originalColor),_hsvBuffer);
    _hsvBuffer[2]*=0.5f;
    final int color=Color.HSVToColor(Color.alpha(originalColor),_hsvBuffer);
    mHighlightPaint.setColor(color);
    mHighlightPaint.setStrokeWidth(dataSet.getHighlightCircleWidth());
    c.drawCircle(pointBuffer[0],pointBuffer[1],shapeHalf,mHighlightPaint);
  }
}

Fixed version (ground truth):
@Override public void drawHighlighted(Canvas c,Highlight[] indices){
  BubbleData bubbleData=mChart.getBubbleData();
  float phaseX=mAnimator.getPhaseX();
  float phaseY=mAnimator.getPhaseY();
  for (  Highlight indice : indices) {
    BubbleDataSet dataSet=bubbleData.getDataSetByIndex(indice.getDataSetIndex());
    if (dataSet == null || !dataSet.isHighlightEnabled())     continue;
    Entry entryFrom=dataSet.getEntryForXIndex(mMinX);
    Entry entryTo=dataSet.getEntryForXIndex(mMaxX);
    int minx=dataSet.getEntryPosition(entryFrom);
    int maxx=Math.min(dataSet.getEntryPosition(entryTo) + 1,dataSet.getEntryCount());
    final BubbleEntry entry=(BubbleEntry)bubbleData.getEntryForHighlight(indice);
    if (entry == null || entry.getXIndex() != indice.getXIndex())     continue;
    Transformer trans=mChart.getTransformer(dataSet.getAxisDependency());
    sizeBuffer[0]=0f;
    sizeBuffer[2]=1f;
    trans.pointValuesToPixel(sizeBuffer);
    final float maxBubbleWidth=Math.abs(sizeBuffer[2] - sizeBuffer[0]);
    final float maxBubbleHeight=Math.abs(mViewPortHandler.contentBottom() - mViewPortHandler.contentTop());
    final float referenceSize=Math.min(maxBubbleHeight,maxBubbleWidth);
    pointBuffer[0]=(float)(entry.getXIndex() - minx) * phaseX + (float)minx;
    pointBuffer[1]=(float)(entry.getVal()) * phaseY;
    trans.pointValuesToPixel(pointBuffer);
    float shapeHalf=getShapeSize(entry.getSize(),dataSet.getMaxSize(),referenceSize) / 2f;
    if (!mViewPortHandler.isInBoundsTop(pointBuffer[1] + shapeHalf) || !mViewPortHandler.isInBoundsBottom(pointBuffer[1] - shapeHalf))     continue;
    if (!mViewPortHandler.isInBoundsLeft(pointBuffer[0] + shapeHalf))     continue;
    if (!mViewPortHandler.isInBoundsRight(pointBuffer[0] - shapeHalf))     break;
    if (indice.getXIndex() < minx || indice.getXIndex() >= maxx)     continue;
    final int originalColor=dataSet.getColor(entry.getXIndex());
    Color.RGBToHSV(Color.red(originalColor),Color.green(originalColor),Color.blue(originalColor),_hsvBuffer);
    _hsvBuffer[2]*=0.5f;
    final int color=Color.HSVToColor(Color.alpha(originalColor),_hsvBuffer);
    mHighlightPaint.setColor(color);
    mHighlightPaint.setStrokeWidth(dataSet.getHighlightCircleWidth());
    c.drawCircle(pointBuffer[0],pointBuffer[1],shapeHalf,mHighlightPaint);
  }
}