summaryrefslogtreecommitdiff
path: root/sys/src/libmp
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2018-04-26 14:55:02 +0100
committeraiju <devnull@localhost>2018-04-26 14:55:02 +0100
commite87ca8d97689ad9a63c0b56d0bfbda00c56abca2 (patch)
treeca90c7c69a4f4350e7c5f7db88cd1e22c806e49f /sys/src/libmp
parent69298c79ab3da8164f9b5317be4ae1b2a75ab4dd (diff)
mpdiv: fix dividing 0 by a small power of two
Diffstat (limited to 'sys/src/libmp')
-rw-r--r--sys/src/libmp/port/mpdiv.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/src/libmp/port/mpdiv.c b/sys/src/libmp/port/mpdiv.c
index ea68acb43..cfd673cfa 100644
--- a/sys/src/libmp/port/mpdiv.c
+++ b/sys/src/libmp/port/mpdiv.c
@@ -22,7 +22,9 @@ mpdiv(mpint *dividend, mpint *divisor, mpint *quotient, mpint *remainder)
// division by one or small powers of two
if(divisor->top == 1 && (divisor->p[0] & divisor->p[0]-1) == 0){
- vlong r = (vlong)dividend->sign * (dividend->p[0] & divisor->p[0]-1);
+ vlong r = 0;
+ if(dividend->top > 0)
+ r = (vlong)dividend->sign * (dividend->p[0] & divisor->p[0]-1);
if(quotient != nil){
sign = divisor->sign;
for(s = 0; ((divisor->p[0] >> s) & 1) == 0; s++)