X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/f72de1ee756e59988c9c9bb49df42f513aa9dca1..85e29c6edea1042eafbb8345ba0a7d805fa9b4bd:/math/mpx.c diff --git a/math/mpx.c b/math/mpx.c index 18baf2f2..3983e7ca 100644 --- a/math/mpx.c +++ b/math/mpx.c @@ -545,15 +545,21 @@ MPX_SHIFTOP(lsr, { size_t nr = MPW_BITS - nb; mpw w; - av += nw; - w = av < avl ? *av++ : 0; - while (av < avl) { - mpw t; - if (dv >= dvl) goto done; - t = *av++; - *dv++ = MPW((w >> nb) | (t << nr)); - w = t; + if (nw >= avl - av) + w = 0; + else { + av += nw; + w = *av++; + + while (av < avl) { + mpw t; + if (dv >= dvl) goto done; + t = *av++; + *dv++ = MPW((w >> nb) | (t << nr)); + w = t; + } } + if (dv < dvl) { *dv++ = MPW(w >> nb); MPX_ZERO(dv, dvl);