aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/exchange_api_common.c53
-rw-r--r--src/lib/exchange_api_purse_merge.c5
-rw-r--r--src/lib/exchange_api_refund.c27
-rw-r--r--src/lib/exchange_api_reserves_history.c2
4 files changed, 48 insertions, 39 deletions
diff --git a/src/lib/exchange_api_common.c b/src/lib/exchange_api_common.c
index 79e5a31dd..4b36aa932 100644
--- a/src/lib/exchange_api_common.c
+++ b/src/lib/exchange_api_common.c
@@ -842,21 +842,17 @@ help_melt (struct CoinHistoryParseContext *pc,
return GNUNET_SYSERR;
}
- if (NULL != pc->dk)
+ /* check that melt fee matches our expectations from /keys! */
+ if ( (GNUNET_YES !=
+ TALER_amount_cmp_currency (&melt_fee,
+ &pc->dk->fees.refresh)) ||
+ (0 !=
+ TALER_amount_cmp (&melt_fee,
+ &pc->dk->fees.refresh)) )
{
- /* check that melt fee matches our expectations from /keys! */
- if ( (GNUNET_YES !=
- TALER_amount_cmp_currency (&melt_fee,
- &pc->dk->fees.refresh)) ||
- (0 !=
- TALER_amount_cmp (&melt_fee,
- &pc->dk->fees.refresh)) )
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
+ GNUNET_break_op (0);
+ return GNUNET_SYSERR;
}
-
if (GNUNET_OK !=
TALER_wallet_melt_verify (
amount,
@@ -938,26 +934,23 @@ help_refund (struct CoinHistoryParseContext *pc,
return GNUNET_SYSERR;
}
/* NOTE: theoretically, we could also check that the given
- merchant_pub and h_contract_terms appear in the
- history under deposits. However, there is really no benefit
- for the exchange to lie here, so not checking is probably OK
- (an auditor ought to check, though). Then again, we similarly
- had no reason to check the merchant's signature (other than a
- well-formendess check). */
+ merchant_pub and h_contract_terms appear in the
+ history under deposits. However, there is really no benefit
+ for the exchange to lie here, so not checking is probably OK
+ (an auditor ought to check, though). Then again, we similarly
+ had no reason to check the merchant's signature (other than a
+ well-formendess check). */
/* check that refund fee matches our expectations from /keys! */
- if (NULL != pc->dk)
+ if ( (GNUNET_YES !=
+ TALER_amount_cmp_currency (&refund_fee,
+ &pc->dk->fees.refund)) ||
+ (0 !=
+ TALER_amount_cmp (&refund_fee,
+ &pc->dk->fees.refund)) )
{
- if ( (GNUNET_YES !=
- TALER_amount_cmp_currency (&refund_fee,
- &pc->dk->fees.refund)) ||
- (0 !=
- TALER_amount_cmp (&refund_fee,
- &pc->dk->fees.refund)) )
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
+ GNUNET_break_op (0);
+ return GNUNET_SYSERR;
}
return GNUNET_NO;
}
diff --git a/src/lib/exchange_api_purse_merge.c b/src/lib/exchange_api_purse_merge.c
index 4b65e97f1..6b6c37519 100644
--- a/src/lib/exchange_api_purse_merge.c
+++ b/src/lib/exchange_api_purse_merge.c
@@ -406,8 +406,9 @@ TALER_EXCHANGE_account_merge (
{
struct TALER_Amount zero_purse_fee;
- TALER_amount_set_zero (purse_value_after_fees->currency,
- &zero_purse_fee);
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (purse_value_after_fees->currency,
+ &zero_purse_fee));
TALER_wallet_account_merge_sign (merge_timestamp,
purse_pub,
purse_expiration,
diff --git a/src/lib/exchange_api_refund.c b/src/lib/exchange_api_refund.c
index 09a21883d..b1cd7c843 100644
--- a/src/lib/exchange_api_refund.c
+++ b/src/lib/exchange_api_refund.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2014-2021 Taler Systems SA
+ Copyright (C) 2014-2022 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
@@ -445,17 +445,30 @@ verify_conflict_history_ok (struct TALER_EXCHANGE_RefundHandle *rh,
{
rtotal = rh->refund_amount;
}
- if (-1 == TALER_amount_cmp (&dtotal,
+ if ( (have_refund) && (! have_deposit) )
+ {
+ GNUNET_break (0);
+ GNUNET_JSON_parse_free (spec);
+ return GNUNET_SYSERR;
+ }
+ if (! (have_refund && have_deposit))
+ {
+ /* need both for a refund-deposit conflict proof */
+ GNUNET_break (0);
+ GNUNET_JSON_parse_free (spec);
+ return GNUNET_SYSERR;
+ }
+ if (-1 != TALER_amount_cmp (&dtotal,
&rtotal))
{
- /* dtotal < rtotal: good! */
+ /* rtotal <= dtotal is fine, no conflict! */
+ GNUNET_break_op (0);
GNUNET_JSON_parse_free (spec);
- return GNUNET_OK;
+ return GNUNET_SYSERR;
}
- /* this fails to prove a conflict */
- GNUNET_break_op (0);
+ /* dtotal < rtotal: that's a conflict! */
GNUNET_JSON_parse_free (spec);
- return GNUNET_SYSERR;
+ return GNUNET_OK;
}
diff --git a/src/lib/exchange_api_reserves_history.c b/src/lib/exchange_api_reserves_history.c
index 1d3891c2e..2a0dd5651 100644
--- a/src/lib/exchange_api_reserves_history.c
+++ b/src/lib/exchange_api_reserves_history.c
@@ -311,6 +311,7 @@ TALER_EXCHANGE_reserves_history (
if (NULL == keys)
{
GNUNET_break (0);
+ curl_easy_cleanup (eh);
GNUNET_free (rsh->url);
GNUNET_free (rsh);
return NULL;
@@ -320,6 +321,7 @@ TALER_EXCHANGE_reserves_history (
if (NULL == gf)
{
GNUNET_break_op (0);
+ curl_easy_cleanup (eh);
GNUNET_free (rsh->url);
GNUNET_free (rsh);
return NULL;