From d7635a84ed7c852e2045ba5a298ea12c477033b3 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Fri, 24 Jul 2009 10:35:17 +0200 Subject: Handle clip vector rasterizer errors If rasterizing the clip vector fails, actually handle the situation instead of crashing. --- libass/ass_render.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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; } -- cgit v1.2.3