From 04b5b4f2a24bc67c2476ffd53f09171f52d0bcb0 Mon Sep 17 00:00:00 2001 From: Ali Gholami Rudi Date: Mon, 2 Feb 2015 22:34:22 +0330 Subject: [PATCH] minmad: prevent multiplication overflow for large files --- minmad.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/minmad.c b/minmad.c index c7386c0..74a9d1a 100644 --- a/minmad.c +++ b/minmad.c @@ -82,10 +82,15 @@ static void cmdwait(void) poll(ufds, 1, -1); } +static long muldiv64(long num, long mul, long div) +{ + return (long long) num * mul / div; +} + static void cmdinfo(void) { - int per = (mpos + moff) * 1000 / msize; - int loc = (mpos + moff) / frame_sz * frame_ms / 1000; + int per = muldiv64(mpos + moff, 1000, msize); + int loc = muldiv64(mpos + moff, frame_ms, frame_sz * 1000); printf("%c %02d.%d%% (%d:%02d:%02d - %04d.%ds) [%s]\r", paused ? (afd < 0 ? '*' : ' ') : '>', per / 10, per % 10, @@ -111,14 +116,14 @@ static void seek(long pos) static void cmdseekrel(int n) { - int diff = n * frame_sz * 1000 / (frame_ms ? frame_ms : 40); + int diff = muldiv64(n, frame_sz * 1000, frame_ms ? frame_ms : 40); seek(mpos + moff + diff); } static void cmdseek100(int n) { if (n <= 100) - seek(msize * n / 100); + seek(muldiv64(msize, n, 100)); } static int cmdexec(void) -- 2.11.4.GIT