]> O.S.I.I.S - jp/vkvg.git/commitdiff
stbtt_InitFont assert debug
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Tue, 1 Mar 2022 10:04:39 +0000 (11:04 +0100)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Tue, 1 Mar 2022 10:04:39 +0000 (11:04 +0100)
src/vkvg_context.c
src/vkvg_fonts.c
src/vkvg_fonts.h

index bb82857af5cc4315850fcb484b5558f5bcd83b81..c0ae0bf3e5fcf7c3d318ee74dba4c20ebb569db1 100644 (file)
@@ -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) {
index ab8c7fd1fa242ce175aa947fe6798dbddc960b90..43a401d8932bd2487316cd55d9d6d55f151d5602 100644 (file)
@@ -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);
index 682e76311ce92341bec8f05f203c2dec8d151b1d..4f1f4de07e0ddf5aba873df19ff7242f57ab0b23 100644 (file)
@@ -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