Buggy code:
public class MalisisFont { public static MalisisFont minecraftFont = new MinecraftFont ( ) ; private static Pattern pattern = Pattern . compile ( "\\{(.*?)}" ) ; protected Font font ; protected FontRenderContext frc ; protected FontGeneratorOptions options = FontGeneratorOptions . DEFAULT ; protected CharData [ ] charData = new CharData [ 256 ] ; protected ResourceLocation textureRl ; protected int size ; protected boolean drawingShadow = false ; public MalisisFont ( File fontFile ) { } public MalisisFont ( File fontFile , FontGeneratorOptions options ) { } public MalisisFont ( ResourceLocation fontFile ) { } public MalisisFont ( ResourceLocation fontFile , FontGeneratorOptions options ) { } public MalisisFont ( Font font ) { } public MalisisFont ( Font font , FontGeneratorOptions options ) { } public ResourceLocation getResourceLocation ( ) { } public void generateTexture ( boolean debug ) { } public CharData getCharData ( char c ) { } public Shape getShape ( String text , float fontSize ) { } protected void prepare ( MalisisRenderer renderer , float x , float y , float z , FontRenderOptions fro ) { } protected void clean ( MalisisRenderer renderer , boolean isDrawing ) { } protected void prepareShadow ( MalisisRenderer renderer ) { } protected void cleanShadow ( MalisisRenderer renderer ) { } protected void prepareLines ( MalisisRenderer renderer , FontRenderOptions fro ) { } protected void cleanLines ( MalisisRenderer renderer ) { } public void render ( MalisisRenderer renderer , String text , float x , float y , float z , FontRenderOptions fro ) { } protected void drawString ( String text , FontRenderOptions fro ) { } protected void drawChar ( CharData cd , float offsetX , float offsetY , FontRenderOptions fro ) { } protected void drawLines ( String text , FontRenderOptions fro ) { } protected void drawLineChar ( CharData cd , float offsetX , float offsetY , FontRenderOptions fro ) { } public String processString ( String str , FontRenderOptions fro ) { } private String translate ( String str ) { } private boolean hasLines ( String text , FontRenderOptions fro ) { } public String clipString ( String str , int width ) { } public String clipString ( String str , int width , FontRenderOptions fro ) { } public String clipString ( String str , int width , FontRenderOptions fro , boolean appendPeriods ) { } public float getStringWidth ( String str ) { } public float getStringWidth ( String str , FontRenderOptions fro , int start , int end ) { } public float getStringWidth ( String str , FontRenderOptions fro ) { if ( StringUtils . isEmpty ( str ) ) return 0 ; <START_BUG> return getStringWidth ( str , fro , 0 , str . length ( ) ) ; <END_BUG> } public float getStringHeight ( ) { } public float getStringHeight ( FontRenderOptions fro ) { } public float getMaxStringWidth ( List < String > strings ) { } public float getMaxStringWidth ( List < String > strings , FontRenderOptions fro ) { } public float getCharWidth ( char c ) { } public float getCharWidth ( char c , FontRenderOptions fro ) { } public float getCharPosition ( String str , FontRenderOptions fro , int position , int charOffset ) { } public List < String > wrapText ( String text , int maxWidth ) { } public List < String > wrapText ( String str , int maxWidth , FontRenderOptions fro ) { } protected void loadCharacterData ( ) { } protected int roundUp ( int n ) { } protected void loadTexture ( boolean forceGenerate ) { } protected BufferedImage readTextureFile ( File textureFile ) { } protected void readUVFile ( File uvFile ) { } public static Font load ( ResourceLocation rl , FontGeneratorOptions options ) { } public static Font load ( File file , FontGeneratorOptions options ) { } public static Font load ( InputStream is , FontGeneratorOptions options ) { } }

Fix:
return getStringWidth ( str , fro , 0 , 0 ) ;