diff options
author | Kevin B Kenny <kennykb@acm.org> | 2005-05-10 17:20:39 (GMT) |
---|---|---|
committer | Kevin B Kenny <kennykb@acm.org> | 2005-05-10 17:20:39 (GMT) |
commit | 5b510b75ec4a1d6fb55691bcf55dbf4b0b936624 (patch) | |
tree | 2a8c6a5370bc1ab79e9ed6d477146fe18604eb59 | |
parent | 6bc86f4b98c36219302ec99939666f84264bc4da (diff) | |
download | tcl-5b510b75ec4a1d6fb55691bcf55dbf4b0b936624.zip tcl-5b510b75ec4a1d6fb55691bcf55dbf4b0b936624.tar.gz tcl-5b510b75ec4a1d6fb55691bcf55dbf4b0b936624.tar.bz2 |
committed local libtommath changes from kennykb-numerics-branch back to the Tcl HEAD
-rw-r--r-- | libtommath/bn_mp_radix_size.c | 13 | ||||
-rw-r--r-- | libtommath/bn_mp_read_radix.c | 7 | ||||
-rw-r--r-- | libtommath/tommath.h | 2 |
3 files changed, 19 insertions, 3 deletions
diff --git a/libtommath/bn_mp_radix_size.c b/libtommath/bn_mp_radix_size.c index 3d423ba..29b1d22 100644 --- a/libtommath/bn_mp_radix_size.c +++ b/libtommath/bn_mp_radix_size.c @@ -66,8 +66,17 @@ int mp_radix_size (mp_int * a, int radix, int *size) } mp_clear (&t); - /* return digs + 1, the 1 is for the NULL byte that would be required. */ - *size = digs + 1; + /* + * return digs + 1, the 1 is for the NULL byte that would be required. + * mp_toradix_n requires a minimum of 3 bytes, so never report less than + * that. + */ + + if ( digs >= 2 ) { + *size = digs + 1; + } else { + *size = 3; + } return MP_OKAY; } diff --git a/libtommath/bn_mp_read_radix.c b/libtommath/bn_mp_read_radix.c index 1ec3937..1e272fb 100644 --- a/libtommath/bn_mp_read_radix.c +++ b/libtommath/bn_mp_read_radix.c @@ -69,6 +69,13 @@ int mp_read_radix (mp_int * a, const char *str, int radix) ++str; } + /* if an illegal character was found, fail. */ + + if ( *str != '\0' ) { + mp_zero( a ); + return MP_VAL; + } + /* set the sign only if a != 0 */ if (mp_iszero(a) != 1) { a->sign = neg; diff --git a/libtommath/tommath.h b/libtommath/tommath.h index bcb9d86..ce8591f 100644 --- a/libtommath/tommath.h +++ b/libtommath/tommath.h @@ -217,7 +217,7 @@ int mp_init_size(mp_int *a, int size); /* ---> Basic Manipulations <--- */ #define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO) -#define mp_iseven(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 0)) ? MP_YES : MP_NO) +#define mp_iseven(a) (((a)->used == 0 || (((a)->dp[0] & 1) == 0)) ? MP_YES : MP_NO) #define mp_isodd(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 1)) ? MP_YES : MP_NO) /* set to zero */ |