aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2017-05-09 13:33:26 +0200
committerChristian Grothoff <christian@grothoff.org>2017-05-09 13:33:26 +0200
commite6d09d25681798a01cc6a61877a0ec4a0f2dca63 (patch)
tree546f1c1fc802d06159fbe07095ab27e16298d978
parent46c7647b27e4d19d2aa7caaf5b6b5f0f0b8a2826 (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.c16
-rw-r--r--src/include/taler_error_codes.h7
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 ********* */