exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

commit e9de3374a974df5e7eeaff0c3241dd98724c642e
parent a039926bb6f022b1467c7059f0b954b64eaaeb5a
Author: Christian Grothoff <christian@grothoff.org>
Date:   Thu,  2 Apr 2020 14:01:41 +0200

fix #6148

Diffstat:
Msrc/util/amount.c | 23++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)

diff --git a/src/util/amount.c b/src/util/amount.c @@ -529,26 +529,23 @@ TALER_amount_add (struct TALER_Amount *sum, int TALER_amount_normalize (struct TALER_Amount *amount) { - int ret; + uint32_t overflow; if (GNUNET_YES != TALER_amount_is_valid (amount)) return GNUNET_SYSERR; - ret = GNUNET_NO; - while ( (amount->value != UINT64_MAX) && - (amount->fraction >= TALER_AMOUNT_FRAC_BASE) ) - { - amount->fraction -= TALER_AMOUNT_FRAC_BASE; - amount->value++; - ret = GNUNET_OK; - } - if (amount->fraction >= TALER_AMOUNT_FRAC_BASE) + if (amount->fraction < TALER_AMOUNT_FRAC_BASE) + return GNUNET_NO; + overflow = amount->fraction / TALER_AMOUT_FRAC_BASE; + amount->fraction %= TALER_AMOUNT_FRAC_BASE; + amount->value += overflow; + ret = GNUNET_OK; + if ( (amount->value < overflow) || + (amount->value > MAX_AMOUNT_VALUE) ) { - /* failed to normalize, adding up fractions caused - main value to overflow! */ invalidate (amount); return GNUNET_SYSERR; } - return ret; + return GNUNET_OK; }