forbid GFX2_Surfaces with 0 pixels

This commit is contained in:
Thomas Bernard 2018-06-25 17:05:43 +02:00
parent 01c6a9cd09
commit 32f6cbfb5c
2 changed files with 15 additions and 12 deletions

View File

@ -28,22 +28,18 @@ T_GFX2_Surface * New_GFX2_Surface(word width, word height)
T_GFX2_Surface * surface; T_GFX2_Surface * surface;
size_t size; size_t size;
size = width * height;
if (size == 0) // surfaces with no pixels not allowed
return NULL;
surface = malloc(sizeof(T_GFX2_Surface)); surface = malloc(sizeof(T_GFX2_Surface));
if (surface == NULL) if (surface == NULL)
return NULL; return NULL;
size = width * height; surface->pixels = malloc(size);
if (size > 0) if(surface->pixels == NULL)
{ {
surface->pixels = malloc(size); free(surface);
if(surface->pixels == NULL) return NULL;
{
free(surface);
return NULL;
}
}
else
{
surface->pixels = NULL;
} }
memset(surface->palette, 0, sizeof(surface->palette)); memset(surface->palette, 0, sizeof(surface->palette));
surface->w = width; surface->w = width;

View File

@ -722,6 +722,13 @@ byte *Render_text_SFont(const char *str, int font_number, int *width, int *heigh
*width = SFont_TextWidth(font, str); *width = SFont_TextWidth(font, str);
text_surface = New_GFX2_Surface(*width, *height); text_surface = New_GFX2_Surface(*width, *height);
if (text_surface == NULL)
{
Warning("Failed to allocate text surface");
SFont_FreeFont(font);
Free_GFX2_Surface(font_surface);
return NULL;
}
// Fill with transparent color // Fill with transparent color
memset(text_surface->pixels, font->Transparent, *width * *height); memset(text_surface->pixels, font->Transparent, *width * *height);
// Rendu du texte // Rendu du texte