Skip to content

Commit

Permalink
Fix line wrapping mode 0/3 bugs
Browse files Browse the repository at this point in the history
This fixes two separate bugs:

a) Don't move a linebreak into the first symbol. This results in a empty
   line at the front, which does not help to equalize line lengths at all.
   Instead, merge line with the second one.
b) When moving a linebreak into a symbol that already is a break, the
   number of lines must be decremented. Otherwise, uninitialized memory
   is possibly used for later layout operations.

Found by fuzzer test case
id:000085,sig:11,src:003377+003350,op:splice,rep:8.

This might also affect and hopefully fix #229.

v2: change semantics according to review
  • Loading branch information
grigorig committed Oct 4, 2016
1 parent 08e7546 commit f4f4895
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion libass/ass_render.c
Original file line number Diff line number Diff line change
Expand Up @@ -1608,7 +1608,10 @@ wrap_lines_smart(ASS_Renderer *render_priv, double max_text_width)
(w->bbox.xMin + w->pos.x));

if (DIFF(l1_new, l2_new) < DIFF(l1, l2)) {
w->linebreak = 1;
if (w->linebreak || w == text_info->glyphs)
text_info->n_lines--;
if (w != text_info->glyphs)
w->linebreak = 1;
s2->linebreak = 0;
exit = 0;
}
Expand Down

0 comments on commit f4f4895

Please sign in to comment.