svn commit: r245481 - stable/9/crypto/openssl/crypto/bn

Xin LI delphij at FreeBSD.org
Wed Jan 16 00:42:26 UTC 2013


Author: delphij
Date: Wed Jan 16 00:42:25 2013
New Revision: 245481
URL: http://svnweb.freebsd.org/changeset/base/245481

Log:
  MFC r244973:
  
  Integrate OpenSSL changeset 22950 (appro):
  
  	bn_word.c: fix overflow bug in BN_add_word.

Modified:
  stable/9/crypto/openssl/crypto/bn/bn_word.c
Directory Properties:
  stable/9/crypto/openssl/   (props changed)

Modified: stable/9/crypto/openssl/crypto/bn/bn_word.c
==============================================================================
--- stable/9/crypto/openssl/crypto/bn/bn_word.c	Wed Jan 16 00:17:47 2013	(r245480)
+++ stable/9/crypto/openssl/crypto/bn/bn_word.c	Wed Jan 16 00:42:25 2013	(r245481)
@@ -144,26 +144,17 @@ int BN_add_word(BIGNUM *a, BN_ULONG w)
 			a->neg=!(a->neg);
 		return(i);
 		}
-	/* Only expand (and risk failing) if it's possibly necessary */
-	if (((BN_ULONG)(a->d[a->top - 1] + 1) == 0) &&
-			(bn_wexpand(a,a->top+1) == NULL))
-		return(0);
-	i=0;
-	for (;;)
+	for (i=0;w!=0 && i<a->top;i++)
 		{
-		if (i >= a->top)
-			l=w;
-		else
-			l=(a->d[i]+w)&BN_MASK2;
-		a->d[i]=l;
-		if (w > l)
-			w=1;
-		else
-			break;
-		i++;
+		a->d[i] = l = (a->d[i]+w)&BN_MASK2;
+		w = (w>l)?1:0;
 		}
-	if (i >= a->top)
+	if (w && i==a->top)
+		{
+		if (bn_wexpand(a,a->top+1) == NULL) return 0;
 		a->top++;
+		a->d[i]=w;
+		}
 	bn_check_top(a);
 	return(1);
 	}


More information about the svn-src-all mailing list