From: Fernando Tarlá Cardoso Lemos Date: Tue, 25 Jan 2011 23:47:37 +0000 (-0200) Subject: Crash when we get the percentages wrong. X-Git-Tag: tree-pr2~106 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=89917976c7689b6466bc8cfce05d981d26d98183;p=i3%2Fi3 Crash when we get the percentages wrong. Better to crash with an assertion than to get into an infinite loop. We cold work around this, but there's a bug here and it's not a rounding bug, so it's better not to conceal it. --- diff --git a/src/render.c b/src/render.c index b79d463f..c6ebb5cc 100644 --- a/src/render.c +++ b/src/render.c @@ -118,9 +118,12 @@ void render_con(Con *con, bool render_fullscreen) { double percentage = child->percent > 0.0 ? child->percent : 1.0 / children; assigned += sizes[i++] = percentage * total; } + assert(assigned == total || + (assigned > total && assigned - total <= children * 2) || + (assigned < total && total - assigned <= children * 2)); int signal = assigned < total ? 1 : -1; while (assigned != total) { - for (i = 0; i < children && assigned < total; ++i) { + for (i = 0; i < children && assigned != total; ++i) { sizes[i] += signal; assigned += signal; }