projects
/
oweals
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Apply "better safe than sorry" approach after addressing sporadic SEGV in
[oweals/openssl.git]
/
crypto
/
bn
/
bn_shift.c
diff --git
a/crypto/bn/bn_shift.c
b/crypto/bn/bn_shift.c
index 513e686f86a8525ab1e0bbe5b89117f3a9fda500..de9312dce231f5de6c03a90baf42ee867c6b6838 100644
(file)
--- a/
crypto/bn/bn_shift.c
+++ b/
crypto/bn/bn_shift.c
@@
-65,6
+65,9
@@
int BN_lshift1(BIGNUM *r, const BIGNUM *a)
register BN_ULONG *ap,*rp,t,c;
int i;
register BN_ULONG *ap,*rp,t,c;
int i;
+ bn_check_top(r);
+ bn_check_top(a);
+
if (r != a)
{
r->neg=a->neg;
if (r != a)
{
r->neg=a->neg;
@@
-98,6
+101,9
@@
int BN_rshift1(BIGNUM *r, const BIGNUM *a)
BN_ULONG *ap,*rp,t,c;
int i;
BN_ULONG *ap,*rp,t,c;
int i;
+ bn_check_top(r);
+ bn_check_top(a);
+
if (BN_is_zero(a))
{
BN_zero(r);
if (BN_is_zero(a))
{
BN_zero(r);
@@
-129,6
+135,9
@@
int BN_lshift(BIGNUM *r, const BIGNUM *a, int n)
BN_ULONG *t,*f;
BN_ULONG l;
BN_ULONG *t,*f;
BN_ULONG l;
+ bn_check_top(r);
+ bn_check_top(a);
+
r->neg=a->neg;
nw=n/BN_BITS2;
if (bn_wexpand(r,a->top+nw+1) == NULL) return(0);
r->neg=a->neg;
nw=n/BN_BITS2;
if (bn_wexpand(r,a->top+nw+1) == NULL) return(0);
@@
-162,6
+171,9
@@
int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
BN_ULONG *t,*f;
BN_ULONG l,tmp;
BN_ULONG *t,*f;
BN_ULONG l,tmp;
+ bn_check_top(r);
+ bn_check_top(a);
+
nw=n/BN_BITS2;
rb=n%BN_BITS2;
lb=BN_BITS2-rb;
nw=n/BN_BITS2;
rb=n%BN_BITS2;
lb=BN_BITS2-rb;
@@
-188,13
+200,13
@@
int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
if (rb == 0)
{
if (rb == 0)
{
- for (i=j
+1; i >
0; i--)
+ for (i=j
; i !=
0; i--)
*(t++)= *(f++);
}
else
{
l= *(f++);
*(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++);
{
tmp =(l>>rb)&BN_MASK2;
l= *(f++);
@@
-202,7
+214,6
@@
int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
}
*(t++) =(l>>rb)&BN_MASK2;
}
}
*(t++) =(l>>rb)&BN_MASK2;
}
- *t=0;
bn_correct_top(r);
bn_check_top(r);
return(1);
bn_correct_top(r);
bn_check_top(r);
return(1);