Program: 26592
Project: 26592
Buggy source:
@Override public void feed(List<BarEntry> entries){
  float size=entries.size() * phaseX;
  int dataSetOffset=(mDataSetCount - 1);
  float barSpaceHalf=mBarSpace / 2f;
  float groupSpaceHalf=mGroupSpace / 2f;
  float barWidth=0.5f;
  for (int i=0; i < size; i++) {
    BarEntry e=entries.get(i);
    float x=e.getXIndex() + i * dataSetOffset + mDataSetIndex + mGroupSpace * i + groupSpaceHalf;
    float y=e.getVal();
    float[] vals=e.getVals();
    if (!mContainsStacks || vals == null) {
      float left=x - barWidth + barSpaceHalf;
      float right=x + barWidth - barSpaceHalf;
      float top=y >= 0 ? y : 0;
      float bottom=y <= 0 ? y : 0;
      if (top > 0)       top*=phaseY;
 else       bottom*=phaseY;
      addBar(left,top,right,bottom);
    }
 else {
      float all=e.getVal();
      for (int k=0; k < vals.length; k++) {
        all-=vals[k];
        y=vals[k] + all;
        float left=x - barWidth + barSpaceHalf;
        float right=x + barWidth - barSpaceHalf;
        float top=y >= 0 ? y : 0;
        float bottom=y <= 0 ? y : 0;
        if (top > 0)         top*=phaseY;
 else         bottom*=phaseY;
        addBar(left,top,right,bottom);
      }
    }
  }
  reset();
}

Fixed version (ground truth):
@Override public void feed(List<BarEntry> entries){
  float size=entries.size() * phaseX;
  int dataSetOffset=(mDataSetCount - 1);
  float barSpaceHalf=mBarSpace / 2f;
  float groupSpaceHalf=mGroupSpace / 2f;
  float barWidth=0.5f;
  for (int i=0; i < size; i++) {
    BarEntry e=entries.get(i);
    float x=e.getXIndex() + i * dataSetOffset + mDataSetIndex + mGroupSpace * i + groupSpaceHalf;
    float y=e.getVal();
    float[] vals=e.getVals();
    if (mInverted) {
      if (!mContainsStacks || vals == null) {
        float left=x - barWidth + barSpaceHalf;
        float right=x + barWidth - barSpaceHalf;
        float bottom=y >= 0 ? y : 0;
        float top=y <= 0 ? y : 0;
        if (top > 0)         top*=phaseY;
 else         bottom*=phaseY;
        addBar(left,top,right,bottom);
      }
 else {
        float all=e.getVal();
        for (int k=0; k < vals.length; k++) {
          all-=vals[k];
          y=vals[k] + all;
          float left=x - barWidth + barSpaceHalf;
          float right=x + barWidth - barSpaceHalf;
          float bottom=y >= 0 ? y : 0;
          float top=y <= 0 ? y : 0;
          if (top > 0)           top*=phaseY;
 else           bottom*=phaseY;
          addBar(left,top,right,bottom);
        }
      }
    }
 else {
      if (!mContainsStacks || vals == null) {
        float left=x - barWidth + barSpaceHalf;
        float right=x + barWidth - barSpaceHalf;
        float top=y >= 0 ? y : 0;
        float bottom=y <= 0 ? y : 0;
        if (top > 0)         top*=phaseY;
 else         bottom*=phaseY;
        addBar(left,top,right,bottom);
      }
 else {
        float all=e.getVal();
        for (int k=0; k < vals.length; k++) {
          all-=vals[k];
          y=vals[k] + all;
          float left=x - barWidth + barSpaceHalf;
          float right=x + barWidth - barSpaceHalf;
          float top=y >= 0 ? y : 0;
          float bottom=y <= 0 ? y : 0;
          if (top > 0)           top*=phaseY;
 else           bottom*=phaseY;
          addBar(left,top,right,bottom);
        }
      }
    }
  }
  reset();
}