This rewrites two "for" loops in BN_rshift() - equality with zero is
authorGeoff Thorpe <geoff@openssl.org>
Thu, 13 Nov 2003 15:03:14 +0000 (15:03 +0000)
committerGeoff Thorpe <geoff@openssl.org>
Thu, 13 Nov 2003 15:03:14 +0000 (15:03 +0000)
generally a more efficient comparison than comparing two integers, and the
first of these two loops was off-by-one (copying one too many values). This
change also removes a superfluous assignment that would set an unused word
to zero (and potentially allow an overrun in some cases).

Submitted by: Nils Larsch
Reviewed by: Geoff Thorpe

crypto/bn/bn_shift.c

index 69c03570bd22d3c313c32ff3ab24379f92a5859e..de9312dce231f5de6c03a90baf42ee867c6b6838 100644 (file)
@@ -200,13 +200,13 @@ int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
 
        if (rb == 0)
                {
-               for (i=j+1; i > 0; i--)
+               for (i=j; i != 0; i--)
                        *(t++)= *(f++);
                }
        else
                {
                l= *(f++);
-               for (i=1; i<j; i++)
+               for (i=j-1; i != 0; i--)
                        {
                        tmp =(l>>rb)&BN_MASK2;
                        l= *(f++);
@@ -214,7 +214,6 @@ int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
                        }
                *(t++) =(l>>rb)&BN_MASK2;
                }
-       *t=0;
        bn_correct_top(r);
        bn_check_top(r);
        return(1);