From: hniksic Date: Thu, 11 Apr 2002 18:51:26 +0000 (-0700) Subject: [svn] Don't allow initial_length to exceed total_length. X-Git-Tag: v1.13~1815 X-Git-Url: http://sjero.net/git/?p=wget;a=commitdiff_plain;h=c77a16309f0d1903961f102d21917f2b882896a5 [svn] Don't allow initial_length to exceed total_length. Published in . --- 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);