aboutsummaryrefslogtreecommitdiff
path: root/src/exchange-lib
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-05-20 15:36:08 +0200
committerChristian Grothoff <christian@grothoff.org>2016-05-20 15:36:08 +0200
commit43cfa7724852529ad77c08bef1d674dfa116b7d4 (patch)
tree0ecb6a187f3190bbfc02e05a90cae81ccc9bfdd8 /src/exchange-lib
parent324003acc09509c005ab08f45636d88139150c54 (diff)
enforce wire deadline >= refund_deadline in API
Diffstat (limited to 'src/exchange-lib')
-rw-r--r--src/exchange-lib/exchange_api_deposit.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/exchange-lib/exchange_api_deposit.c b/src/exchange-lib/exchange_api_deposit.c
index 871787729..0a5fc0eda 100644
--- a/src/exchange-lib/exchange_api_deposit.c
+++ b/src/exchange-lib/exchange_api_deposit.c
@@ -371,7 +371,7 @@ verify_signatures (const struct TALER_EXCHANGE_DenomPublicKey *dki,
* @param timestamp timestamp when the contract was finalized, must match approximately the current time of the exchange
* @param transaction_id transaction id for the transaction between merchant and customer
* @param merchant_pub the public key of the merchant (used to identify the merchant for refund requests)
- * @param refund_deadline date until which the merchant can issue a refund to the customer via the exchange (can be zero if refunds are not allowed)
+ * @param refund_deadline date until which the merchant can issue a refund to the customer via the exchange (can be zero if refunds are not allowed); must not be after the @a wire_deadline
* @param coin_sig the signature made with purpose #TALER_SIGNATURE_WALLET_COIN_DEPOSIT made by the customer with the coin’s private key.
* @param cb the callback to call when a reply for this request is available
* @param cb_cls closure for the above callback
@@ -405,6 +405,12 @@ TALER_EXCHANGE_deposit (struct TALER_EXCHANGE_Handle *exchange,
struct TALER_Amount amount_without_fee;
(void) GNUNET_TIME_round_abs (&wire_deadline);
+ (void) GNUNET_TIME_round_abs (&refund_deadline);
+ if (refund_deadline.abs_value_us > wire_deadline.abs_value_us)
+ {
+ GNUNET_break (0);
+ return NULL;
+ }
if (GNUNET_YES !=
MAH_handle_is_ready (exchange))
{
@@ -421,7 +427,7 @@ TALER_EXCHANGE_deposit (struct TALER_EXCHANGE_Handle *exchange,
}
key_state = TALER_EXCHANGE_get_keys (exchange);
dki = TALER_EXCHANGE_get_denomination_key (key_state,
- denom_pub);
+ denom_pub);
if (NULL == dki)
{
TALER_LOG_WARNING ("Denomination key unknown to exchange\n");