From a1db0220a1582a568ce05257d1e5b602132602a1 Mon Sep 17 00:00:00 2001 From: Ray Date: Tue, 12 Oct 2021 23:00:00 +0200 Subject: [PATCH] REVIEWED: LoadFontFromImage() Avoid crash on wrong sprite font --- src/rtext.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/rtext.c b/src/rtext.c index dd6bcf2d7..c4388cd0e 100644 --- a/src/rtext.c +++ b/src/rtext.c @@ -364,7 +364,9 @@ Font LoadFontFromImage(Image image, Color key, int firstChar) #define MAX_GLYPHS_FROM_IMAGE 256 // Maximum number of glyphs supported on image scan #endif - #define COLOR_EQUAL(col1, col2) ((col1.r == col2.r)&&(col1.g == col2.g)&&(col1.b == col2.b)&&(col1.a == col2.a)) + #define COLOR_EQUAL(col1, col2) ((col1.r == col2.r) && (col1.g == col2.g) && (col1.b == col2.b) && (col1.a == col2.a)) + + Font font = GetFontDefault(); int charSpacing = 0; int lineSpacing = 0; @@ -374,8 +376,8 @@ Font LoadFontFromImage(Image image, Color key, int firstChar) // We allocate a temporal arrays for chars data measures, // once we get the actual number of chars, we copy data to a sized arrays - int tempCharValues[MAX_GLYPHS_FROM_IMAGE]; - Rectangle tempCharRecs[MAX_GLYPHS_FROM_IMAGE]; + int tempCharValues[MAX_GLYPHS_FROM_IMAGE] = { 0 }; + Rectangle tempCharRecs[MAX_GLYPHS_FROM_IMAGE] = { 0 }; Color *pixels = LoadImageColors(image); @@ -390,6 +392,8 @@ Font LoadFontFromImage(Image image, Color key, int firstChar) if (!COLOR_EQUAL(pixels[y*image.width + x], key)) break; } + if ((x == 0) || (y == 0)) return font; + charSpacing = x; lineSpacing = y; @@ -445,9 +449,7 @@ Font LoadFontFromImage(Image image, Color key, int firstChar) .mipmaps = 1 }; - // Create font with all data parsed from image - Font font = { 0 }; - + // Set font with all data parsed from image font.texture = LoadTextureFromImage(fontClear); // Convert processed image to OpenGL texture font.glyphCount = index; font.glyphPadding = 0;