From 5b510b75ec4a1d6fb55691bcf55dbf4b0b936624 Mon Sep 17 00:00:00 2001 From: Kevin B Kenny Date: Tue, 10 May 2005 17:20:39 +0000 Subject: committed local libtommath changes from kennykb-numerics-branch back to the Tcl HEAD --- libtommath/bn_mp_radix_size.c | 13 +++++++++++-- libtommath/bn_mp_read_radix.c | 7 +++++++ 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 */ -- cgit v0.12