Blenfont: fix use incorrect clear of ascii glyph cache, leading to crash
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Mon, 19 Sep 2011 14:09:13 +0000 (14:09 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Mon, 19 Sep 2011 14:09:13 +0000 (14:09 +0000)
when toggling use antialising user preference. Also fix some other use of
uninitialized memory found by valgrind.

source/blender/blenfont/intern/blf_dir.c
source/blender/blenfont/intern/blf_font.c
source/blender/blenfont/intern/blf_glyph.c

index 1c99af0c7a9a6c76e0bd0b230ca411c68487041d..46be49b37e9035441a0d96a57f085f0c06f13470 100644 (file)
@@ -76,7 +76,7 @@ void BLF_dir_add(const char *path)
        if (dir) /* already in the list ? just return. */
                return;
        
-       dir= (DirBLF *)MEM_mallocN(sizeof(DirBLF), "BLF_dir_add");
+       dir= (DirBLF *)MEM_callocN(sizeof(DirBLF), "BLF_dir_add");
        dir->path= BLI_strdup(path);
        BLI_addhead(&global_font_dir, dir);
 }
@@ -104,7 +104,7 @@ char **BLF_dir_get(int *ndir)
        if (!count)
                return NULL;
        
-       dirs= (char **)MEM_mallocN(sizeof(char *) * count, "BLF_dir_get");
+       dirs= (char **)MEM_callocN(sizeof(char *) * count, "BLF_dir_get");
        p= global_font_dir.first;
        i= 0;
        while (p) {
index f3f3b759e5c5720965e19db1cf252b39d2a03453..26af3a3fd4f78736d0688fb4788e30a293d9f8dd 100644 (file)
@@ -511,7 +511,7 @@ FontBLF *blf_font_new(const char *name, const char *filename)
        FT_Error err;
        char *mfile;
 
-       font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new");
+       font= (FontBLF *)MEM_callocN(sizeof(FontBLF), "blf_font_new");
        err= FT_New_Face(ft_lib, filename, 0, &font->face);
        if (err) {
                MEM_freeN(font);
@@ -553,7 +553,7 @@ FontBLF *blf_font_new_from_mem(const char *name, unsigned char *mem, int mem_siz
        FontBLF *font;
        FT_Error err;
 
-       font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new_from_mem");
+       font= (FontBLF *)MEM_callocN(sizeof(FontBLF), "blf_font_new_from_mem");
        err= FT_New_Memory_Face(ft_lib, mem, mem_size, 0, &font->face);
        if (err) {
                MEM_freeN(font);
index b661005b50b28f86fc6218e236e6ad4395f76fca..99d41cd7abdf8a78a27a0d106f6bef64e11746be 100644 (file)
@@ -75,7 +75,7 @@ GlyphCacheBLF *blf_glyph_cache_new(FontBLF *font)
 {
        GlyphCacheBLF *gc;
 
-       gc= (GlyphCacheBLF *)MEM_mallocN(sizeof(GlyphCacheBLF), "blf_glyph_cache_new");
+       gc= (GlyphCacheBLF *)MEM_callocN(sizeof(GlyphCacheBLF), "blf_glyph_cache_new");
        gc->next= NULL;
        gc->prev= NULL;
        gc->size= font->size;
@@ -131,10 +131,8 @@ void blf_glyph_cache_clear(FontBLF *font)
                                blf_glyph_free(g);
                        }
                }
-       }
 
-       if(font->glyph_cache) {
-               memset(font->glyph_cache->glyph_ascii_table, 0, sizeof(font->glyph_cache->glyph_ascii_table));
+               memset(gc->glyph_ascii_table, 0, sizeof(gc->glyph_ascii_table));
        }
 }
 
@@ -250,20 +248,11 @@ GlyphBLF *blf_glyph_add(FontBLF *font, unsigned int index, unsigned int c)
        if (err || slot->format != FT_GLYPH_FORMAT_BITMAP)
                return NULL;
 
-       g= (GlyphBLF *)MEM_mallocN(sizeof(GlyphBLF), "blf_glyph_add");
-       g->next= NULL;
-       g->prev= NULL;
+       g= (GlyphBLF *)MEM_callocN(sizeof(GlyphBLF), "blf_glyph_add");
        g->c= c;
        g->idx= (FT_UInt)index;
-       g->tex= 0;
-       g->build_tex= 0;
-       g->bitmap= NULL;
        g->xoff= -1;
        g->yoff= -1;
-       g->uv[0][0]= 0.0f;
-       g->uv[0][1]= 0.0f;
-       g->uv[1][0]= 0.0f;
-       g->uv[1][1]= 0.0f;
        bitmap= slot->bitmap;
        g->width= bitmap.width;
        g->height= bitmap.rows;