From: Grigori Goronzy Date: Fri, 24 Jul 2009 08:35:17 +0000 (+0200) Subject: Handle clip vector rasterizer errors X-Git-Tag: 0.9.7~15 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d7635a84ed7c852e2045ba5a298ea12c477033b3;p=libass Handle clip vector rasterizer errors If rasterizing the clip vector fails, actually handle the situation instead of crashing. --- diff --git a/libass/ass_render.c b/libass/ass_render.c index 7b85706..d2f3c1b 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -743,13 +743,19 @@ static void blend_vector_clip(ass_renderer_t *render_priv, FT_BitmapGlyph clip_bm; ass_image_t *cur; ass_drawing_t *drawing = render_priv->state.clip_drawing; + int error; if (!drawing) return; // Rasterize it FT_Glyph_Copy((FT_Glyph) drawing->glyph, &glyph); - FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, 0, 1); + error = FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, 0, 1); + if (error) { + ass_msg(render_priv->library, MSGL_V, + "Clip vector rasterization failed: %d. Skipping.", error); + goto blend_vector_exit; + } clip_bm = (FT_BitmapGlyph) glyph; clip_bm->top = -clip_bm->top; @@ -832,6 +838,7 @@ static void blend_vector_clip(ass_renderer_t *render_priv, // Free clip vector and its bitmap, we don't need it anymore FT_Done_Glyph(glyph); +blend_vector_exit: ass_drawing_free(render_priv->state.clip_drawing); render_priv->state.clip_drawing = 0; }