projects
/
oweals
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Check for the presence of _WIN32 rather than its value.
[oweals/openssl.git]
/
crypto
/
bn
/
bn_print.c
diff --git
a/crypto/bn/bn_print.c
b/crypto/bn/bn_print.c
index f6030ff14cc6cb4cacad7b95229e565b7a95acd0..a16bde862c328f02bc2066a543b836ae18a47506 100644
(file)
--- a/
crypto/bn/bn_print.c
+++ b/
crypto/bn/bn_print.c
@@
-23,12
+23,9
@@
char *BN_bn2hex(const BIGNUM *a)
char *buf;
char *p;
char *buf;
char *p;
- if (a->neg && BN_is_zero(a)) {
- /* "-0" == 3 bytes including NULL terminator */
- buf = OPENSSL_malloc(3);
- } else {
- buf = OPENSSL_malloc(a->top * BN_BYTES * 2 + 2);
- }
+ if (BN_is_zero(a))
+ return OPENSSL_strdup("0");
+ buf = OPENSSL_malloc(a->top * BN_BYTES * 2 + 2);
if (buf == NULL) {
BNerr(BN_F_BN_BN2HEX, ERR_R_MALLOC_FAILURE);
goto err;
if (buf == NULL) {
BNerr(BN_F_BN_BN2HEX, ERR_R_MALLOC_FAILURE);
goto err;
@@
-67,8
+64,8
@@
char *BN_bn2dec(const BIGNUM *a)
/*-
* get an upper bound for the length of the decimal integer
* num <= (BN_num_bits(a) + 1) * log(2)
/*-
* get an upper bound for the length of the decimal integer
* num <= (BN_num_bits(a) + 1) * log(2)
- * <= 3 * BN_num_bits(a) * 0.10
0
1 + log(2) + 1 (rounding error)
- * <=
BN_num_bits(a)/10 + BN_num_bits/
1000 + 1 + 1
+ * <= 3 * BN_num_bits(a) * 0.101 + log(2) + 1 (rounding error)
+ * <=
3 * BN_num_bits(a) / 10 + 3 * BN_num_bits /
1000 + 1 + 1
*/
i = BN_num_bits(a) * 3;
num = (i / 10 + i / 1000 + 1) + 1;
*/
i = BN_num_bits(a) * 3;
num = (i / 10 + i / 1000 + 1) + 1;
@@
-92,14
+89,13
@@
char *BN_bn2dec(const BIGNUM *a)
if (BN_is_negative(t))
*p++ = '-';
if (BN_is_negative(t))
*p++ = '-';
- i = 0;
while (!BN_is_zero(t)) {
while (!BN_is_zero(t)) {
+ if (lp - bn_data >= bn_data_num)
+ goto err;
*lp = BN_div_word(t, BN_DEC_CONV);
if (*lp == (BN_ULONG)-1)
goto err;
lp++;
*lp = BN_div_word(t, BN_DEC_CONV);
if (*lp == (BN_ULONG)-1)
goto err;
lp++;
- if (lp - bn_data >= bn_data_num)
- goto err;
}
lp--;
/*
}
lp--;
/*
@@
-187,10
+183,12
@@
int BN_hex2bn(BIGNUM **bn, const char *a)
}
ret->top = h;
bn_correct_top(ret);
}
ret->top = h;
bn_correct_top(ret);
- ret->neg = neg;
*bn = ret;
bn_check_top(ret);
*bn = ret;
bn_check_top(ret);
+ /* Don't set the negative flag if it's zero. */
+ if (ret->top != 0)
+ ret->neg = neg;
return (num);
err:
if (*bn == NULL)
return (num);
err:
if (*bn == NULL)
@@
-242,7
+240,7
@@
int BN_dec2bn(BIGNUM **bn, const char *a)
if (j == BN_DEC_NUM)
j = 0;
l = 0;
if (j == BN_DEC_NUM)
j = 0;
l = 0;
- while (
*a
) {
+ while (
--i >= 0
) {
l *= 10;
l += *a - '0';
a++;
l *= 10;
l += *a - '0';
a++;
@@
-254,11
+252,13
@@
int BN_dec2bn(BIGNUM **bn, const char *a)
j = 0;
}
}
j = 0;
}
}
- ret->neg = neg;
bn_correct_top(ret);
*bn = ret;
bn_check_top(ret);
bn_correct_top(ret);
*bn = ret;
bn_check_top(ret);
+ /* Don't set the negative flag if it's zero. */
+ if (ret->top != 0)
+ ret->neg = neg;
return (num);
err:
if (*bn == NULL)
return (num);
err:
if (*bn == NULL)
@@
-269,6
+269,7
@@
int BN_dec2bn(BIGNUM **bn, const char *a)
int BN_asc2bn(BIGNUM **bn, const char *a)
{
const char *p = a;
int BN_asc2bn(BIGNUM **bn, const char *a)
{
const char *p = a;
+
if (*p == '-')
p++;
if (*p == '-')
p++;
@@
-279,7
+280,8
@@
int BN_asc2bn(BIGNUM **bn, const char *a)
if (!BN_dec2bn(bn, p))
return 0;
}
if (!BN_dec2bn(bn, p))
return 0;
}
- if (*a == '-')
+ /* Don't set the negative flag if it's zero. */
+ if (*a == '-' && (*bn)->top != 0)
(*bn)->neg = 1;
return 1;
}
(*bn)->neg = 1;
return 1;
}