From f4e42ec0717a7c43160807acf85363e43eb4cbff Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 28 Dec 2018 10:03:38 -0500 Subject: [PATCH] table printer: Be more careful with shrink Ensure that 0 <= shrink[i] <= widths[i], to avoid bad situations. Closes: #2496 Approved by: matthiasclasen --- app/flatpak-table-printer.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/flatpak-table-printer.c b/app/flatpak-table-printer.c index 360fd7548..ba1102a9d 100644 --- a/app/flatpak-table-printer.c +++ b/app/flatpak-table-printer.c @@ -464,11 +464,10 @@ flatpak_table_printer_print_full (FlatpakTablePrinter *printer, if (!ellipsize) continue; - shrinkable += widths[i]; if (col && col->title) - shrinkable -= strlen (col->title); + shrinkable += MAX (0, widths[i] - strlen (col->title)); else - shrinkable -= 5; + shrinkable += MAX (0, widths[i] - 5); } for (i = 0; i < printer->columns->len && i < printer->n_columns; i++) @@ -478,15 +477,16 @@ flatpak_table_printer_print_full (FlatpakTablePrinter *printer, if (ellipsize) { - int sh = widths[i]; + int sh; if (col && col->title) - sh = MAX (0, sh - strlen (col->title)); + sh = MAX (0, widths[i] - strlen (col->title)); else - sh = MAX (0, sh - 5); - shrinks[i] = shortfall * (sh / (double)shrinkable); + sh = MAX (0, widths[i] - 5); + shrinks[i] = MIN (shortfall * (sh / (double)shrinkable), widths[i]); leftover -= shrinks[i]; } } + last = leftover + 1; while (leftover > 0 && leftover < last) {