summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2009-07-24 10:35:17 +0200
committerGrigori Goronzy <greg@blackbox>2009-07-24 15:39:20 +0200
commitd7635a84ed7c852e2045ba5a298ea12c477033b3 (patch)
tree856779fb20324be20d9dcf6a7c2ce835711562c8
parenta40f299a7bd74597bc54cae7264b5a45b9ec11b9 (diff)
downloadlibass-d7635a84ed7c852e2045ba5a298ea12c477033b3.tar.bz2
libass-d7635a84ed7c852e2045ba5a298ea12c477033b3.tar.xz
Handle clip vector rasterizer errors
If rasterizing the clip vector fails, actually handle the situation instead of crashing.
-rw-r--r--libass/ass_render.c9
1 files changed, 8 insertions, 1 deletions
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;
}