summaryrefslogtreecommitdiffstats
path: root/libass/ass_library.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-11-09 10:41:54 +0100
committerwm4 <wm4@nowhere>2014-11-09 10:41:54 +0100
commit11300cd37fc0038f3004b0da5748091f5f763738 (patch)
tree243fa115af89216ee2a4463edcef440c488f7448 /libass/ass_library.c
parentdc054a1fdb1e9145e905612f296bbafd5ba7b530 (diff)
downloadlibass-11300cd37fc0038f3004b0da5748091f5f763738.tar.bz2
libass-11300cd37fc0038f3004b0da5748091f5f763738.tar.xz
Check more mallocs
This is just a start and gets most easy ones.
Diffstat (limited to 'libass/ass_library.c')
-rw-r--r--libass/ass_library.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/libass/ass_library.c b/libass/ass_library.c
index b33ca55..5b7a5c9 100644
--- a/libass/ass_library.c
+++ b/libass/ass_library.c
@@ -40,8 +40,8 @@ static void ass_msg_handler(int level, const char *fmt, va_list va, void *data)
ASS_Library *ass_library_init(void)
{
ASS_Library* lib = calloc(1, sizeof(*lib));
- lib->msg_callback = ass_msg_handler;
-
+ if (lib)
+ lib->msg_callback = ass_msg_handler;
return lib;
}
@@ -86,16 +86,22 @@ void ass_set_style_overrides(ASS_Library *priv, char **list)
for (p = list, cnt = 0; *p; ++p, ++cnt) {
}
- priv->style_overrides = malloc((cnt + 1) * sizeof(char *));
+ priv->style_overrides = calloc(cnt + 1, sizeof(char *));
+ if (!priv->style_overrides)
+ return;
for (p = list, q = priv->style_overrides; *p; ++p, ++q)
*q = strdup(*p);
- priv->style_overrides[cnt] = NULL;
}
-static void grow_array(void **array, int nelem, size_t elsize)
+static int grow_array(void **array, int nelem, size_t elsize)
{
- if (!(nelem & 31))
- *array = realloc(*array, (nelem + 32) * elsize);
+ if (!(nelem & 31)) {
+ void *ptr = realloc(*array, (nelem + 32) * elsize);
+ if (!ptr)
+ return 0;
+ *array = ptr;
+ }
+ return 1;
}
void ass_add_font(ASS_Library *priv, char *name, char *data, int size)
@@ -103,17 +109,26 @@ void ass_add_font(ASS_Library *priv, char *name, char *data, int size)
int idx = priv->num_fontdata;
if (!name || !data || !size)
return;
- grow_array((void **) &priv->fontdata, priv->num_fontdata,
- sizeof(*priv->fontdata));
+ if (!grow_array((void **) &priv->fontdata, priv->num_fontdata,
+ sizeof(*priv->fontdata)))
+ return;
priv->fontdata[idx].name = strdup(name);
-
priv->fontdata[idx].data = malloc(size);
+
+ if (!priv->fontdata[idx].name || !priv->fontdata[idx].data)
+ goto error;
+
memcpy(priv->fontdata[idx].data, data, size);
priv->fontdata[idx].size = size;
priv->num_fontdata++;
+ return;
+
+error:
+ free(priv->fontdata[idx].name);
+ free(priv->fontdata[idx].data);
}
void ass_clear_fonts(ASS_Library *priv)