Fixed interger overflow in progress meter for large files

This commit is contained in:
Damien Miller 1999-11-11 12:25:14 +11:00
parent 33e511edb3
commit 634bf647af
1 changed files with 5 additions and 5 deletions

10
scp.c
View File

@ -42,11 +42,11 @@ and ssh has the necessary privileges.)
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* $Id: scp.c,v 1.2 1999/10/28 05:23:30 damien Exp $ * $Id: scp.c,v 1.3 1999/11/11 01:25:14 damien Exp $
*/ */
#include "includes.h" #include "includes.h"
RCSID("$Id: scp.c,v 1.2 1999/10/28 05:23:30 damien Exp $"); RCSID("$Id: scp.c,v 1.3 1999/11/11 01:25:14 damien Exp $");
#include "ssh.h" #include "ssh.h"
#include "xmalloc.h" #include "xmalloc.h"
@ -976,7 +976,7 @@ run_err(const char *fmt, ...)
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* $Id: scp.c,v 1.2 1999/10/28 05:23:30 damien Exp $ * $Id: scp.c,v 1.3 1999/11/11 01:25:14 damien Exp $
*/ */
char * char *
@ -1121,7 +1121,7 @@ progressmeter(int flag)
struct timeval now, td, wait; struct timeval now, td, wait;
off_t cursize, abbrevsize; off_t cursize, abbrevsize;
double elapsed; double elapsed;
int ratio, barlength, i, remaining; unsigned int ratio, barlength, i, remaining;
char buf[256]; char buf[256];
if (flag == -1) { if (flag == -1) {
@ -1132,7 +1132,7 @@ progressmeter(int flag)
(void)gettimeofday(&now, (struct timezone *)0); (void)gettimeofday(&now, (struct timezone *)0);
cursize = statbytes; cursize = statbytes;
if (totalbytes != 0) { if (totalbytes != 0) {
ratio = cursize * 100 / totalbytes; ratio = (cursize >> 10) * 100 / (totalbytes >> 10);
ratio = MAX(ratio, 0); ratio = MAX(ratio, 0);
ratio = MIN(ratio, 100); ratio = MIN(ratio, 100);
} }