bn_word.c: fix overflow bug in BN_add_word.
This commit is contained in:
parent
8bb870df9e
commit
134c00659a
@ -144,26 +144,17 @@ int BN_add_word(BIGNUM *a, BN_ULONG w)
|
|||||||
a->neg=!(a->neg);
|
a->neg=!(a->neg);
|
||||||
return(i);
|
return(i);
|
||||||
}
|
}
|
||||||
/* Only expand (and risk failing) if it's possibly necessary */
|
for (i=0;w!=0 && i<a->top;i++)
|
||||||
if (((BN_ULONG)(a->d[a->top - 1] + 1) == 0) &&
|
|
||||||
(bn_wexpand(a,a->top+1) == NULL))
|
|
||||||
return(0);
|
|
||||||
i=0;
|
|
||||||
for (;;)
|
|
||||||
{
|
{
|
||||||
if (i >= a->top)
|
a->d[i] = l = (a->d[i]+w)&BN_MASK2;
|
||||||
l=w;
|
w = (w>l)?1:0;
|
||||||
else
|
|
||||||
l=(a->d[i]+w)&BN_MASK2;
|
|
||||||
a->d[i]=l;
|
|
||||||
if (w > l)
|
|
||||||
w=1;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
if (i >= a->top)
|
if (w && i==a->top)
|
||||||
|
{
|
||||||
|
if (bn_wexpand(a,a->top+1) == NULL) return 0;
|
||||||
a->top++;
|
a->top++;
|
||||||
|
a->d[i]=w;
|
||||||
|
}
|
||||||
bn_check_top(a);
|
bn_check_top(a);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user