diff options
author | Grigori Goronzy <greg@chown.ath.cx> | 2014-05-29 03:59:08 +0200 |
---|---|---|
committer | Grigori Goronzy <greg@chown.ath.cx> | 2014-05-29 04:05:46 +0200 |
commit | 59f2290907e61038a7f07af536cb56981835b35e (patch) | |
tree | fd9655ab619cab610003c805c6fd8b7568b63f8f /libass/ass_render.c | |
parent | bdf51ba70eb3858896b6b95447de7262aa4f1eee (diff) | |
download | libass-59f2290907e61038a7f07af536cb56981835b35e.tar.bz2 libass-59f2290907e61038a7f07af536cb56981835b35e.tar.xz |
shaper: add FriBidi error handling
It is unlikely, but FriBidi might not process a string correctly,
and we should handle that. Tested by making it fail always. This
should also fix some compiler warnings.
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r-- | libass/ass_render.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index 67d1b78..0d08dd9 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -1985,7 +1985,11 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, resolve_base_direction(render_priv->state.font_encoding)); ass_shaper_find_runs(render_priv->shaper, render_priv, glyphs, text_info->length); - ass_shaper_shape(render_priv->shaper, text_info); + if (ass_shaper_shape(render_priv->shaper, text_info) < 0) { + ass_msg(render_priv->library, MSGL_ERR, "Failed to shape text"); + free_render_context(render_priv); + return 1; + } // Retrieve glyphs for (i = 0; i < text_info->length; i++) { @@ -2075,6 +2079,12 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, // Reorder text into visual order FriBidiStrIndex *cmap = ass_shaper_reorder(render_priv->shaper, text_info); + if (!cmap) { + ass_msg(render_priv->library, MSGL_ERR, "Failed to reorder text"); + ass_shaper_cleanup(render_priv->shaper, text_info); + free_render_context(render_priv); + return 1; + } // Reposition according to the map pen.x = 0; |