From c77a16309f0d1903961f102d21917f2b882896a5 Mon Sep 17 00:00:00 2001 From: hniksic Date: Thu, 11 Apr 2002 11:51:26 -0700 Subject: [PATCH] [svn] Don't allow initial_length to exceed total_length. Published in . --- src/ChangeLog | 6 ++++++ src/progress.c | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 56713018..590f3861 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2002-04-11 Hrvoje Niksic + + * progress.c (bar_create): If INITIAL is larger than TOTAL, fix + TOTAL. + (bar_finish): Likewise. + 2002-04-11 Hrvoje Niksic * html-url.c (tag_handle_form): New function. Pick up form diff --git a/src/progress.c b/src/progress.c index de5d16a3..644c1b2b 100644 --- a/src/progress.c +++ b/src/progress.c @@ -461,6 +461,11 @@ bar_create (long initial, long total) memset (bp, 0, sizeof (*bp)); + /* In theory, our callers should take care of this pathological + case, but it can sometimes happen. */ + if (initial > total) + total = initial; + bp->initial_length = initial; bp->total_length = total; @@ -493,7 +498,7 @@ bar_update (void *progress, long howmuch, long dltime) adjust bp->total_length to the new reality, so that the code in create_image() that depends on total size being smaller or equal to the expected size doesn't abort. */ - bp->total_length = bp->count + bp->initial_length; + bp->total_length = bp->initial_length + bp->count; /* This code attempts to determine the current download speed. We measure the speed over the interval of approximately three @@ -565,6 +570,11 @@ bar_finish (void *progress, long dltime) { struct bar_progress *bp = progress; + if (bp->total_length > 0 + && bp->count + bp->initial_length > bp->total_length) + /* See bar_update() for explanation. */ + bp->total_length = bp->initial_length + bp->count; + create_image (bp, dltime); display_image (bp->buffer); -- 2.39.2