diff options
author | Christian Grothoff <christian@grothoff.org> | 2019-06-18 15:38:26 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2019-06-18 15:52:22 +0200 |
commit | 11afb48cbb9121455522026f11467bb8b0711439 (patch) | |
tree | 401b62286da27e7a2a26df45bafab0ae87db68a8 | |
parent | 6ff867877cf2e487a8ad3a0a09e2e7fb6c1a5d3d (diff) | |
download | merchant-11afb48cbb9121455522026f11467bb8b0711439.tar.gz merchant-11afb48cbb9121455522026f11467bb8b0711439.tar.bz2 merchant-11afb48cbb9121455522026f11467bb8b0711439.zip |
fix leaks
-rw-r--r-- | src/backend/taler-merchant-httpd_check-payment.c | 4 | ||||
-rw-r--r-- | src/backend/taler-merchant-httpd_pay.c | 9 | ||||
-rw-r--r-- | src/backend/taler-merchant-httpd_refund.c | 22 | ||||
-rw-r--r-- | src/backenddb/plugin_merchantdb_postgres.c | 2 | ||||
-rw-r--r-- | src/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 index 11f6ff91..3c5909d9 100644 --- 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 index 227497f2..bf15106b 100644 --- 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 index 1a2a0f81..7ed77958 100644 --- 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 index 34689943..aaf1477a 100644 --- 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 index 131ca198..8c96cd5f 100644 --- 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); } |