From 8088d2dcfb8e3c0631ea4f065a1a1f9975f75fdd Mon Sep 17 00:00:00 2001 From: "Dr.Smile" Date: Tue, 21 May 2019 00:37:05 +0300 Subject: Fix bunch of UB Found by Coverity Scan and -fsanitize=undefined --- libass/ass.c | 2 +- libass/ass_render.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libass/ass.c b/libass/ass.c index c3bc6e5..50b0df2 100644 --- a/libass/ass.c +++ b/libass/ass.c @@ -188,7 +188,7 @@ static int test_and_set_read_order_bit(ASS_Track *track, int id) if (resize_read_order_bitmap(track, id) < 0) return -1; int index = id / 32; - int bit = 1 << (id % 32); + uint32_t bit = 1u << (id % 32); if (track->parser_priv->read_order_bitmap[index] & bit) return 1; track->parser_priv->read_order_bitmap[index] |= bit; diff --git a/libass/ass_render.c b/libass/ass_render.c index af93ba4..0c4d204 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -2295,6 +2295,7 @@ static void render_and_combine_glyphs(ASS_Renderer *render_priv, nb_bitmaps++; } last_info = info; + assert(current_info); ASS_Vector pos, pos_o; info->pos.x = double_to_d6(device_x + d6_to_double(info->pos.x) * render_priv->font_scale_x); @@ -2302,7 +2303,7 @@ static void render_and_combine_glyphs(ASS_Renderer *render_priv, get_bitmap_glyph(render_priv, info, &pos, &pos_o, &offset, !current_info->bitmap_count, flags); - if (!current_info || (!info->bm && !info->bm_o)) { + if (!info->bm && !info->bm_o) { ass_cache_dec_ref(info->bm); ass_cache_dec_ref(info->bm_o); continue; @@ -3080,7 +3081,8 @@ ASS_Image *ass_render_frame(ASS_Renderer *priv, ASS_Track *track, } // sort by layer - qsort(priv->eimg, cnt, sizeof(EventImages), cmp_event_layer); + if (cnt > 0) + qsort(priv->eimg, cnt, sizeof(EventImages), cmp_event_layer); // call fix_collisions for each group of events with the same layer EventImages *last = priv->eimg; -- cgit v1.2.3