Fix segfault in progress bar in certain locales

* src/progress.c (create_image): Protect memset from negative count

Reported-by: JunDong Xie
This commit is contained in:
Tim Rühsen 2019-12-18 13:06:46 +01:00
parent 042f2727bf
commit 6bd74e33d6

View File

@ -1099,8 +1099,11 @@ create_image (struct bar_progress *bp, double dl_total_time, bool done)
/* " 234.56M" */ /* " 234.56M" */
down_size = human_readable (size, 1000, 2); down_size = human_readable (size, 1000, 2);
cols_diff = PROGRESS_FILESIZE_LEN - count_cols (down_size); cols_diff = PROGRESS_FILESIZE_LEN - count_cols (down_size);
memset (p, ' ', cols_diff); if (cols_diff > 0)
p += cols_diff; {
memset (p, ' ', cols_diff);
p += cols_diff;
}
p += sprintf (p, "%s", down_size); p += sprintf (p, "%s", down_size);
/* " 12.52Kb/s or 12.52KB/s" */ /* " 12.52Kb/s or 12.52KB/s" */
@ -1182,8 +1185,11 @@ create_image (struct bar_progress *bp, double dl_total_time, bool done)
else else
ncols += sprintf (p + nbytes, "%ss", print_decimal (dl_total_time)); ncols += sprintf (p + nbytes, "%ss", print_decimal (dl_total_time));
p += ncols + bytes_cols_diff; p += ncols + bytes_cols_diff;
memset (p, ' ', PROGRESS_ETA_LEN - ncols); if (ncols < PROGRESS_ETA_LEN)
p += PROGRESS_ETA_LEN - ncols; {
memset (p, ' ', PROGRESS_ETA_LEN - ncols);
p += PROGRESS_ETA_LEN - ncols;
}
} }
padding = bp->width - count_cols (bp->buffer); padding = bp->width - count_cols (bp->buffer);