Program: 80409
Project: 80409
Buggy source:
@Override public boolean draw(final GLState glState){
  if (mNumChildren == 0) {
    return false;
  }
  drawStart(glState);
  if (mClippingEnabled) {
    mOriginalScissorEnabled=glState.isScissorTestEnabled();
    if (mOriginalScissorEnabled) {
      if (mOriginalScissor == null) {
        mOriginalScissor=new int[4];
      }
      glState.getScissor(mOriginalScissor);
    }
 else {
      glState.setScissorTestEnabled(true);
    }
    if (mClipStageRect == null) {
      mClipStageRect=new RectF();
    }
    final Scene scene=getScene();
    if (scene != null) {
      scene.globalToStage(mBounds,mClipStageRect);
    }
 else {
      mClipStageRect.set(mBounds);
    }
    glState.setScissor((int)mClipStageRect.left,(int)mClipStageRect.top,(int)mClipStageRect.width(),(int)mClipStageRect.height());
  }
  if (mCacheEnabled) {
    if ((mInvalidateFlags & CHILDREN) != 0) {
      if (mCacheFrameBuffer == null || !mCacheFrameBuffer.hasSize(mSize)) {
        if (mCacheFrameBuffer != null) {
          mCacheFrameBuffer.unload();
          mCacheFrameBuffer.getTexture().unload();
        }
        mCacheFrameBuffer=new FrameBuffer(glState,mSize.x,mSize.y,true);
        if (mCacheSprite == null) {
          mCacheSprite=new Sprite();
          mCacheSprite.flipTextureCoordBuffer(FLIP_Y);
        }
        mCacheSprite.setTexture(mCacheFrameBuffer.getTexture());
      }
      mCacheFrameBuffer.bind(mCacheProjection);
      mCacheFrameBuffer.clear();
      drawChildren(glState);
      mCacheFrameBuffer.unbind();
    }
    mCacheSprite.draw(glState);
  }
 else {
    drawChildren(glState);
  }
  if (mClippingEnabled) {
    if (mOriginalScissorEnabled) {
      glState.setScissor(mOriginalScissor);
    }
 else {
      glState.setScissorTestEnabled(false);
    }
  }
  drawEnd(glState);
  mInvalidateFlags&=~(VISUAL | CHILDREN);
  return true;
}

Fixed version (ground truth):
@Override public boolean draw(final GLState glState){
  if (mNumChildren == 0) {
    return false;
  }
  drawStart(glState);
  if (mClippingEnabled) {
    mOriginalScissorEnabled=glState.isScissorTestEnabled();
    if (mOriginalScissorEnabled) {
      if (mOriginalScissor == null) {
        mOriginalScissor=new int[4];
      }
      glState.getScissor(mOriginalScissor);
    }
 else {
      glState.setScissorTestEnabled(true);
    }
    if (mClipStageRect == null) {
      mClipStageRect=new RectF();
    }
    final Scene scene=getScene();
    if (scene != null) {
      scene.globalToStage(mBounds,mClipStageRect);
    }
 else {
      mClipStageRect.set(mBounds);
    }
    glState.setScissor((int)Math.ceil(mClipStageRect.left),(int)Math.ceil(mClipStageRect.top),(int)Math.ceil(mClipStageRect.width()),(int)Math.ceil(mClipStageRect.height()));
  }
  if (mCacheEnabled) {
    if ((mInvalidateFlags & CHILDREN) != 0) {
      if (mCacheFrameBuffer == null || !mCacheFrameBuffer.hasSize(mSize)) {
        if (mCacheFrameBuffer != null) {
          mCacheFrameBuffer.unload();
          mCacheFrameBuffer.getTexture().unload();
        }
        mCacheFrameBuffer=new FrameBuffer(glState,mSize.x,mSize.y,true);
        if (mCacheSprite == null) {
          mCacheSprite=new Sprite();
          mCacheSprite.flipTextureCoordBuffer(FLIP_Y);
        }
        mCacheSprite.setTexture(mCacheFrameBuffer.getTexture());
      }
      mCacheFrameBuffer.bind(mCacheProjection);
      mCacheFrameBuffer.clear();
      drawChildren(glState);
      mCacheFrameBuffer.unbind();
    }
    mCacheSprite.draw(glState);
  }
 else {
    drawChildren(glState);
  }
  if (mClippingEnabled) {
    if (mOriginalScissorEnabled) {
      glState.setScissor(mOriginalScissor);
    }
 else {
      glState.setScissorTestEnabled(false);
    }
  }
  drawEnd(glState);
  mInvalidateFlags&=~(VISUAL | CHILDREN);
  return true;
}