summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2019-05-21 00:37:05 +0300
committerDr.Smile <vabnick@gmail.com>2019-05-21 00:37:05 +0300
commit8088d2dcfb8e3c0631ea4f065a1a1f9975f75fdd (patch)
treed56b9380f09e34db5ae0eb2a1c383535e8b8a177
parent4c45b6f79fcdd82b30ecc55df6572776a051d363 (diff)
downloadlibass-8088d2dcfb8e3c0631ea4f065a1a1f9975f75fdd.tar.bz2
libass-8088d2dcfb8e3c0631ea4f065a1a1f9975f75fdd.tar.xz
Fix bunch of UB
Found by Coverity Scan and -fsanitize=undefined
-rw-r--r--libass/ass.c2
-rw-r--r--libass/ass_render.c6
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;