aboutsummaryrefslogtreecommitdiff
path: root/src/exchange/taler-exchange-httpd_reserves_purse.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2023-02-17 16:57:29 +0100
committerChristian Grothoff <christian@grothoff.org>2023-02-17 16:57:29 +0100
commit86e0f2c70d07c7c5e1656667bd818498ea55d0a4 (patch)
treedba9439c62d1b017319d9e313a82b33ea6c68187 /src/exchange/taler-exchange-httpd_reserves_purse.c
parent87a78c6f8ce1d50a5f61eb5c3f222cdef0b635ee (diff)
fix memory leak and transaction error handling related to KYC
Diffstat (limited to 'src/exchange/taler-exchange-httpd_reserves_purse.c')
-rw-r--r--src/exchange/taler-exchange-httpd_reserves_purse.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/exchange/taler-exchange-httpd_reserves_purse.c b/src/exchange/taler-exchange-httpd_reserves_purse.c
index d62c1db9..5e39f810 100644
--- a/src/exchange/taler-exchange-httpd_reserves_purse.c
+++ b/src/exchange/taler-exchange-httpd_reserves_purse.c
@@ -189,8 +189,7 @@ purse_transaction (void *cls,
{
struct ReservePurseContext *rpc = cls;
enum GNUNET_DB_QueryStatus qs;
-
- const char *required;
+ char *required;
qs = TALER_KYCLOGIC_kyc_test_required (
TALER_KYCLOGIC_KYC_TRIGGER_P2P_RECEIVE,
@@ -215,11 +214,22 @@ purse_transaction (void *cls,
if (NULL != required)
{
rpc->kyc.ok = false;
- return TEH_plugin->insert_kyc_requirement_for_account (
+ qs = TEH_plugin->insert_kyc_requirement_for_account (
TEH_plugin->cls,
required,
&rpc->h_payto,
&rpc->kyc.requirement_row);
+ GNUNET_free (required);
+ if (GNUNET_DB_STATUS_HARD_ERROR == qs)
+ {
+ GNUNET_break (0);
+ *mhd_ret
+ = TALER_MHD_reply_with_error (connection,
+ MHD_HTTP_INTERNAL_SERVER_ERROR,
+ TALER_EC_GENERIC_DB_STORE_FAILED,
+ "insert_kyc_requirement_for_account");
+ }
+ return qs;
}
rpc->kyc.ok = true;