From: Jean-Philippe Bruyère Date: Tue, 1 Mar 2022 10:04:39 +0000 (+0100) Subject: stbtt_InitFont assert debug X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=35cbbae7be7cb8f31daa6549b5130614a4b567c3;p=jp%2Fvkvg.git stbtt_InitFont assert debug --- diff --git a/src/vkvg_context.c b/src/vkvg_context.c index bb82857..c0ae0bf 100644 --- a/src/vkvg_context.c +++ b/src/vkvg_context.c @@ -1118,7 +1118,10 @@ void vkvg_load_font_from_path (VkvgContext ctx, const char* path, const char* na return; RECORD(ctx, VKVG_CMD_SET_FONT_PATH, name); _vkvg_font_identity_t* fid = _font_cache_add_font_identity(ctx, path, name); - _font_cache_load_font_file_in_memory (fid); + if (!_font_cache_load_font_file_in_memory (fid)) { + ctx->status = VKVG_STATUS_FILE_NOT_FOUND; + return; + } _select_font_face (ctx, name); } void vkvg_load_font_from_memory (VkvgContext ctx, unsigned char* fontBuffer, long fontBufferByteSize, const char* name) { diff --git a/src/vkvg_fonts.c b/src/vkvg_fonts.c index ab8c7fd..43a401d 100644 --- a/src/vkvg_fonts.c +++ b/src/vkvg_fonts.c @@ -378,14 +378,17 @@ void _font_add_name (_vkvg_font_identity_t* font, const char* name, int nameLeng font->names[font->namesCount-1] = (char*)calloc(nameLength, sizeof (char)); strcpy (font->names[font->namesCount-1], name); } -void _font_cache_load_font_file_in_memory (_vkvg_font_identity_t* fontId) { +bool _font_cache_load_font_file_in_memory (_vkvg_font_identity_t* fontId) { FILE* fontFile = fopen(fontId->fontFile, "rb"); + if (!fontFile) + return false; fseek(fontFile, 0, SEEK_END); fontId->fontBufSize = ftell(fontFile); /* how long is the file ? */ fseek(fontFile, 0, SEEK_SET); /* reset */ fontId->fontBuffer = malloc(fontId->fontBufSize); fread(fontId->fontBuffer, fontId->fontBufSize, 1, fontFile); fclose(fontFile); + return true; } _vkvg_font_identity_t* _font_cache_add_font_identity (VkvgContext ctx, const char* fontFilePath, const char* name){ _font_cache_t* cache = (_font_cache_t*)ctx->dev->fontCache; @@ -434,7 +437,12 @@ _vkvg_font_t* _find_or_create_font_size (VkvgContext ctx) { else newSize.curLine.height = newSize.face->height >> 6; #else - assert(stbtt_InitFont(&font->stbInfo, font->fontBuffer, 0) && "stbtt_initFont failed"); + int result = stbtt_InitFont(&font->stbInfo, font->fontBuffer, 0); + assert(result && "stbtt_initFont failed"); + if (!result) { + ctx->status = VKVG_STATUS_INVALID_FONT; + return NULL; + } stbtt_GetFontVMetrics(&font->stbInfo, &font->ascent, &font->descent, &font->lineGap); newSize.charLookup = (_char_ref**)calloc (font->stbInfo.numGlyphs, sizeof(_char_ref*)); //newSize.scale = stbtt_ScaleForPixelHeight(&font->stbInfo, newSize.charSize); diff --git a/src/vkvg_fonts.h b/src/vkvg_fonts.h index 682e763..4f1f4de 100644 --- a/src/vkvg_fonts.h +++ b/src/vkvg_fonts.h @@ -180,7 +180,7 @@ void _fonts_cache_create (VkvgDevice dev); //Release all ressources of font cache. void _font_cache_destroy (VkvgDevice dev); _vkvg_font_identity_t *_font_cache_add_font_identity (VkvgContext ctx, const char* fontFile, const char *name); -void _font_cache_load_font_file_in_memory (_vkvg_font_identity_t* fontId); +bool _font_cache_load_font_file_in_memory (_vkvg_font_identity_t* fontId); //Draw text void _font_cache_show_text (VkvgContext ctx, const char* text); //Get text dimmensions