diff options
author | Christian Grothoff <christian@grothoff.org> | 2017-05-09 13:33:26 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2017-05-09 13:33:26 +0200 |
commit | e6d09d25681798a01cc6a61877a0ec4a0f2dca63 (patch) | |
tree | 546f1c1fc802d06159fbe07095ab27e16298d978 | |
parent | 46c7647b27e4d19d2aa7caaf5b6b5f0f0b8a2826 (diff) |
handle error code returned by TALER_amount_subtract in new error case TALER_EC_PAYBACK_COIN_BALANCE_NEGATIVE
-rw-r--r-- | src/exchange/taler-exchange-httpd_db.c | 16 | ||||
-rw-r--r-- | src/include/taler_error_codes.h | 7 |
2 files changed, 20 insertions, 3 deletions
diff --git a/src/exchange/taler-exchange-httpd_db.c b/src/exchange/taler-exchange-httpd_db.c index 0634e34f6..f53600cc1 100644 --- a/src/exchange/taler-exchange-httpd_db.c +++ b/src/exchange/taler-exchange-httpd_db.c @@ -2402,9 +2402,19 @@ TEH_DB_execute_payback (struct MHD_Connection *connection, return TEH_RESPONSE_reply_internal_db_error (connection, TALER_EC_PAYBACK_HISTORY_DB_ERROR); } - TALER_amount_subtract (&amount, - value, - &spent); + if (GNUNET_SYSERR == + TALER_amount_subtract (&amount, + value, + &spent)) + { + GNUNET_break (0); + TEH_plugin->rollback (TEH_plugin->cls, + session); + TEH_plugin->free_coin_transaction_list (TEH_plugin->cls, + tl); + return TEH_RESPONSE_reply_internal_db_error (connection, + TALER_EC_PAYBACK_COIN_BALANCE_NEGATIVE); + } if ( (0 == amount.fraction) && (0 == amount.value) ) { diff --git a/src/include/taler_error_codes.h b/src/include/taler_error_codes.h index 84240c295..bfca715a2 100644 --- a/src/include/taler_error_codes.h +++ b/src/include/taler_error_codes.h @@ -896,6 +896,13 @@ enum TALER_ErrorCode */ TALER_EC_PAYBACK_BLINDING_FAILED = 1858, + /** + * The coin's remaining balance is zero. The request is denied. + * This response is provided with an HTTP status code of + * MHD_HTTP_INTERNAL_SERVER_ERROR + */ + TALER_EC_PAYBACK_COIN_BALANCE_NEGATIVE = 1857, + /* *********** Merchant backend error codes ********* */ |