diff options
-rw-r--r-- | libass/ass_parse.c | 16 | ||||
-rw-r--r-- | libass/ass_render.c | 12 |
2 files changed, 19 insertions, 9 deletions
diff --git a/libass/ass_parse.c b/libass/ass_parse.c index bb6fcff..3d7afe2 100644 --- a/libass/ass_parse.c +++ b/libass/ass_parse.c @@ -24,6 +24,7 @@ #include <string.h> #include <math.h> +#include "ass_library.h" #include "ass_render.h" #include "ass_parse.h" @@ -101,6 +102,8 @@ void update_font(ASS_Renderer *render_priv) unsigned val; ASS_FontDesc desc; + if (!render_priv->state.family) + return; if (render_priv->state.family[0] == '@') { desc.vertical = 1; desc.family = strdup(render_priv->state.family + 1); @@ -108,6 +111,8 @@ void update_font(ASS_Renderer *render_priv) desc.vertical = 0; desc.family = strdup(render_priv->state.family); } + if (!desc.family) + return; val = render_priv->state.bold; // 0 = normal, 1 = bold, >1 = exact weight @@ -520,11 +525,14 @@ char *parse_tags(ASS_Renderer *render_priv, char *p, char *end, double pwr, if (nargs && strncmp(start, "0", args->end - start)) { skip_spaces(&start); family = strndup(start, args->end - start); - } else + } else { family = strdup(render_priv->state.style->FontName); - free(render_priv->state.family); - render_priv->state.family = family; - update_font(render_priv); + } + if (family) { + free(render_priv->state.family); + render_priv->state.family = family; + update_font(render_priv); + } } else if (tag("alpha")) { int i; if (nargs) { diff --git a/libass/ass_render.c b/libass/ass_render.c index c0bbb9f..f529ffe 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -997,11 +997,13 @@ void reset_render_context(ASS_Renderer *render_priv, ASS_Style *style) (style->StrikeOut ? DECO_STRIKETHROUGH : 0); render_priv->state.font_size = style->FontSize; - free(render_priv->state.family); - render_priv->state.family = NULL; - render_priv->state.family = strdup(style->FontName); - render_priv->state.treat_family_as_pattern = - style->treat_fontname_as_pattern; + char* new_family = strdup(style->FontName); + if (new_family) { + free(render_priv->state.family); + render_priv->state.family = new_family; + render_priv->state.treat_family_as_pattern = + style->treat_fontname_as_pattern; + } render_priv->state.bold = style->Bold; render_priv->state.italic = style->Italic; update_font(render_priv); |