Program: 134287
Project: 134287
Buggy source:
public void render(IvBezierPath3D path){
  if (path.isDirty()) {
    path.buildDistances();
  }
  GL11.glEnable(GL11.GL_BLEND);
  OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA,GL11.GL_ONE_MINUS_SRC_ALPHA,GL11.GL_ONE,GL11.GL_ZERO);
  String plainText="String_Node_Str";
  ArrayList<String> modifiers=new ArrayList<String>();
  modifiers.add("String_Node_Str");
  for (int i=0; i < text.length(); i++) {
    char character=text.charAt(i);
    if (character == '\u00A7' && i + 1 < text.length()) {
      modifiers.set(modifiers.size() - 1,modifiers.get(modifiers.size() - 1) + text.substring(i,i + 2));
      i++;
    }
 else {
      plainText=plainText + character;
      modifiers.add(modifiers.get(modifiers.size() - 1));
    }
  }
  for (int i=0; i < plainText.length(); i++) {
    int charIndex=inwards ? i : plainText.length() - i - 1;
    char character=plainText.charAt(charIndex);
    if (character != ' ') {
      double totalProgress=(spreadToFill ? ((double)i / (double)text.length()) : (i * 0.5)) + shift;
      double finalProgress=((totalProgress % 1.0) + 1.0) % 1.0;
      if (finalProgress >= capBottom && finalProgress <= capTop) {
        IvBezierPoint3DCachedStep cachedStep=path.getCachedStep(finalProgress);
        double[] position=cachedStep.getPosition();
        double[] rotation=path.getNaturalRotation(cachedStep,0.01);
        double red=IvMathHelper.mix(cachedStep.getLeftPoint().getRed(),cachedStep.getRightPoint().getRed(),cachedStep.getInnerProgress());
        double green=IvMathHelper.mix(cachedStep.getLeftPoint().getGreen(),cachedStep.getRightPoint().getGreen(),cachedStep.getInnerProgress());
        double blue=IvMathHelper.mix(cachedStep.getLeftPoint().getBlue(),cachedStep.getRightPoint().getBlue(),cachedStep.getInnerProgress());
        double alpha=IvMathHelper.mix(cachedStep.getLeftPoint().getAlpha(),cachedStep.getRightPoint().getAlpha(),cachedStep.getInnerProgress());
        double textSize=IvMathHelper.mix(cachedStep.getLeftPoint().getFontSize(),cachedStep.getRightPoint().getFontSize(),cachedStep.getInnerProgress());
        GL11.glPushMatrix();
        GL11.glTranslated(position[0],position[1],position[2]);
        GL11.glScaled(-textSize / 12.0,-textSize / 12.0,-textSize / 12.0);
        GL11.glRotatef((float)rotation[0] + (inwards ? 0.0f : 180.0f),0.0f,1.0f,0.0f);
        GL11.glRotatef((float)rotation[1],1.0f,0.0f,0.0f);
        fontRenderer.drawString(modifiers.get(charIndex) + character,0,0,((int)(red * 255.0) << 16) + ((int)(green * 255.0) << 8) + ((int)(blue * 255.0)));
        GL11.glPopMatrix();
      }
    }
  }
  GL11.glDisable(GL11.GL_BLEND);
}

Fixed version (ground truth):
public void render(IvBezierPath3D path){
  if (path.isDirty()) {
    path.buildDistances();
  }
  GL11.glEnable(GL11.GL_BLEND);
  OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA,GL11.GL_ONE_MINUS_SRC_ALPHA,GL11.GL_ONE,GL11.GL_ZERO);
  String plainText="String_Node_Str";
  ArrayList<String> modifiers=new ArrayList<>();
  modifiers.add("String_Node_Str");
  for (int i=0; i < text.length(); i++) {
    char character=text.charAt(i);
    if (character == '\u00A7' && i + 1 < text.length()) {
      modifiers.set(modifiers.size() - 1,modifiers.get(modifiers.size() - 1) + text.substring(i,i + 2));
      i++;
    }
 else {
      plainText=plainText + character;
      modifiers.add(modifiers.get(modifiers.size() - 1));
    }
  }
  for (int i=0; i < plainText.length(); i++) {
    int charIndex=inwards ? i : plainText.length() - i - 1;
    char character=plainText.charAt(charIndex);
    if (character != ' ') {
      double totalProgress=(spreadToFill ? ((double)i / (double)text.length()) : (i * 0.5)) + shift;
      double finalProgress=((totalProgress % 1.0) + 1.0) % 1.0;
      if (finalProgress >= capBottom && finalProgress <= capTop) {
        IvBezierPoint3DCachedStep cachedStep=path.getCachedStep(finalProgress);
        double[] position=cachedStep.getPosition();
        double[] rotation=path.getNaturalRotation(cachedStep,0.01);
        double red=IvMathHelper.mix(cachedStep.getLeftPoint().getRed(),cachedStep.getRightPoint().getRed(),cachedStep.getInnerProgress());
        double green=IvMathHelper.mix(cachedStep.getLeftPoint().getGreen(),cachedStep.getRightPoint().getGreen(),cachedStep.getInnerProgress());
        double blue=IvMathHelper.mix(cachedStep.getLeftPoint().getBlue(),cachedStep.getRightPoint().getBlue(),cachedStep.getInnerProgress());
        double alpha=IvMathHelper.mix(cachedStep.getLeftPoint().getAlpha(),cachedStep.getRightPoint().getAlpha(),cachedStep.getInnerProgress());
        double textSize=IvMathHelper.mix(cachedStep.getLeftPoint().getFontSize(),cachedStep.getRightPoint().getFontSize(),cachedStep.getInnerProgress());
        GL11.glPushMatrix();
        GL11.glTranslated(position[0],position[1],position[2]);
        GL11.glScaled(-textSize / 12.0,-textSize / 12.0,-textSize / 12.0);
        GL11.glRotatef((float)rotation[0] + (inwards ? 0.0f : 180.0f),0.0f,1.0f,0.0f);
        GL11.glRotatef((float)rotation[1],1.0f,0.0f,0.0f);
        fontRenderer.drawString(modifiers.get(charIndex) + character,0,0,((int)(red * 255.0) << 16) + ((int)(green * 255.0) << 8) + ((int)(blue * 255.0)));
        GL11.glPopMatrix();
      }
    }
  }
  GL11.glDisable(GL11.GL_BLEND);
}