merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit 11afb48cbb9121455522026f11467bb8b0711439
parent 6ff867877cf2e487a8ad3a0a09e2e7fb6c1a5d3d
Author: Christian Grothoff <christian@grothoff.org>
Date:   Tue, 18 Jun 2019 15:38:26 +0200

fix leaks

Diffstat:
Msrc/backend/taler-merchant-httpd_check-payment.c | 4++++
Msrc/backend/taler-merchant-httpd_pay.c | 9++++++---
Msrc/backend/taler-merchant-httpd_refund.c | 22+++++++++++++++++-----
Msrc/backenddb/plugin_merchantdb_postgres.c | 2++
Msrc/lib/merchant_api_refund.c | 1-
5 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_check-payment.c b/src/backend/taler-merchant-httpd_check-payment.c @@ -342,6 +342,7 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh, { GNUNET_break (0); json_decref (contract_terms); + GNUNET_free (last_session_id); GNUNET_free (final_contract_url); return TMH_RESPONSE_reply_internal_error (connection, TALER_EC_CHECK_PAYMENT_FAILED_COMPUTE_PROPOSAL_HASH, @@ -381,6 +382,7 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh, GNUNET_free_non_null (h_contract_terms_str); GNUNET_free (final_contract_url); json_decref (contract_terms); + GNUNET_free (last_session_id); return ret; } @@ -401,6 +403,7 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh, GNUNET_free_non_null (h_contract_terms_str); GNUNET_free (final_contract_url); json_decref (contract_terms); + GNUNET_free (last_session_id); return TMH_RESPONSE_reply_internal_error (connection, TALER_EC_CHECK_PAYMENT_DB_FETCH_CONTRACT_TERMS_ERROR, "Merchant database error (contract terms corrupted)"); @@ -426,6 +429,7 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh, GNUNET_free_non_null (h_contract_terms_str); GNUNET_free (final_contract_url); json_decref (contract_terms); + GNUNET_free (last_session_id); return TMH_RESPONSE_reply_internal_error (connection, TALER_EC_PAY_DB_FETCH_TRANSACTION_ERROR, "Merchant database error"); diff --git a/src/backend/taler-merchant-httpd_pay.c b/src/backend/taler-merchant-httpd_pay.c @@ -844,12 +844,15 @@ check_payment_sufficient (struct PayContext *pc) if (-1 == TALER_amount_cmp (&acc_amount, &pc->amount)) { + char *str; + GNUNET_break_op (0); + str = TALER_amount_to_string (&acc_amount); GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "price vs. sent: %s vs. %s\n", - TALER_amount_to_string (&pc->amount), - TALER_amount_to_string (&acc_amount)); - + TALER_amount2s (&pc->amount), + str); + GNUNET_free (str); return TALER_EC_PAY_PAYMENT_INSUFFICIENT; } } diff --git a/src/backend/taler-merchant-httpd_refund.c b/src/backend/taler-merchant-httpd_refund.c @@ -161,13 +161,14 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh, if (GNUNET_NO == res) { GNUNET_break_op (0); + json_decref (root); return MHD_YES; } - if (GNUNET_SYSERR == res) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Hard error from JSON parser\n"); + json_decref (root); return MHD_NO; } @@ -177,6 +178,7 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh, GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "No instance found\n"); GNUNET_JSON_parse_free (spec); + json_decref (root); return TMH_RESPONSE_reply_not_found (connection, TALER_EC_REFUND_INSTANCE_UNKNOWN, "Unknown instance given"); @@ -196,6 +198,7 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh, GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != qs); /* Always report on hard error as well to enable diagnostics */ GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs); + json_decref (root); return TMH_RESPONSE_reply_internal_error (connection, TALER_EC_REFUND_LOOKUP_DB_ERROR, "An error occurred while retrieving payment data from db"); @@ -205,6 +208,7 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh, GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Unknown order id given: %s\n", order_id); + json_decref (root); return TMH_RESPONSE_reply_not_found (connection, TALER_EC_REFUND_ORDER_ID_UNKNOWN, "Order id not found in database"); @@ -218,8 +222,10 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh, { GNUNET_break (0); GNUNET_JSON_parse_free (spec); + json_decref (contract_terms); GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not hash contract terms\n"); + json_decref (root); return TMH_RESPONSE_reply_internal_error (connection, TALER_EC_INTERNAL_LOGIC_ERROR, "Could not hash contract terms"); @@ -231,6 +237,8 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh, "increase refund")) { GNUNET_break (0); + json_decref (contract_terms); + json_decref (root); return GNUNET_DB_STATUS_HARD_ERROR; } qs = db->increase_refund_for_contract_NT (db->cls, @@ -276,6 +284,8 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh, /* Always report on hard error as well to enable diagnostics */ GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs); GNUNET_JSON_parse_free (spec); + json_decref (contract_terms); + json_decref (root); return TMH_RESPONSE_reply_internal_error (connection, TALER_EC_REFUND_MERCHANT_DB_COMMIT_ERROR, "Internal database error or refund amount too big"); @@ -286,6 +296,8 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh, "Refunded amount lower or equal to previous refund: %s\n", TALER_amount2s (&refund)); GNUNET_JSON_parse_free (spec); + json_decref (contract_terms); + json_decref (root); return TMH_RESPONSE_reply_external_error (connection, TALER_EC_REFUND_INCONSISTENT_AMOUNT, "Amount incorrect: not larger than the previous one"); @@ -308,14 +320,14 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh, if (GNUNET_OK != GNUNET_CRYPTO_eddsa_sign (&mi->privkey.eddsa_priv, - &confirmation.purpose, - &sig)) + &confirmation.purpose, + &sig)) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to sign successful refund confirmation\n"); json_decref (contract_terms); - json_decref (root); GNUNET_JSON_parse_free (spec); + json_decref (root); return TMH_RESPONSE_reply_internal_error (connection, TALER_EC_REFUND_MERCHANT_SIGNING_FAILED, "Refund done, but failed to sign confirmation"); @@ -352,8 +364,8 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh, contract_terms); GNUNET_free (refund_pickup_url); GNUNET_free (refund_redirect_url); - json_decref (root); GNUNET_JSON_parse_free (spec); + json_decref (root); return ret; } } diff --git a/src/backenddb/plugin_merchantdb_postgres.c b/src/backenddb/plugin_merchantdb_postgres.c @@ -1519,10 +1519,12 @@ find_tip_authorizations_cb (void *cls, &amount)) { GNUNET_break (0); + GNUNET_PQ_cleanup_result (rs); ctx->qs = GNUNET_DB_STATUS_HARD_ERROR; return; } } + GNUNET_PQ_cleanup_result (rs); } if (0 == i) diff --git a/src/lib/merchant_api_refund.c b/src/lib/merchant_api_refund.c @@ -177,7 +177,6 @@ TALER_MERCHANT_refund_increase_cancel (struct TALER_MERCHANT_RefundIncreaseOpera } TALER_curl_easy_post_finished (&rio->post_ctx); GNUNET_free (rio->url); - GNUNET_free (rio->post_ctx.json_enc); GNUNET_free (rio); }