From 12deb6c2670f663a3c0734e28673f508fffa3210 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 13 Feb 2021 16:24:38 +0100 Subject: fix memory leaks --- src/exchange/taler-exchange-httpd.c | 9 ++++----- src/exchange/taler-exchange-httpd_keys.c | 19 ++++++++----------- .../taler-exchange-httpd_management_post_keys.c | 2 ++ src/exchange/taler-exchange-httpd_wire.c | 14 ++++++++++---- src/exchangedb/exchangedb_accounts.c | 1 + src/util/crypto_helper_denom.c | 1 + src/util/crypto_helper_esign.c | 1 + src/util/taler-exchange-secmod-eddsa.c | 1 + src/util/taler-exchange-secmod-rsa.c | 3 +++ 9 files changed, 31 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/exchange/taler-exchange-httpd.c b/src/exchange/taler-exchange-httpd.c index 4208e4ca8..3b8d6ed82 100644 --- a/src/exchange/taler-exchange-httpd.c +++ b/src/exchange/taler-exchange-httpd.c @@ -381,7 +381,8 @@ proceed_with_handler (const struct TEH_RequestHandler *rh, GNUNET_assert (NULL == root); return MHD_NO; /* bad upload, could not even generate error */ } - if ( (GNUNET_NO == res) || (NULL == root) ) + if ( (GNUNET_NO == res) || + (NULL == root) ) { GNUNET_assert (NULL == root); return MHD_YES; /* so far incomplete upload or parser error */ @@ -427,8 +428,7 @@ proceed_with_handler (const struct TEH_RequestHandler *rh, rh->url, url); GNUNET_break_op (0); - if (NULL != root) - json_decref (root); + json_decref (root); return TALER_MHD_reply_with_error (connection, MHD_HTTP_NOT_FOUND, TALER_EC_EXCHANGE_GENERIC_WRONG_NUMBER_OF_SEGMENTS, @@ -454,8 +454,7 @@ proceed_with_handler (const struct TEH_RequestHandler *rh, connection, args); } - if (NULL != root) - json_decref (root); + json_decref (root); return ret; } diff --git a/src/exchange/taler-exchange-httpd_keys.c b/src/exchange/taler-exchange-httpd_keys.c index c85b2c568..df49b93f9 100644 --- a/src/exchange/taler-exchange-httpd_keys.c +++ b/src/exchange/taler-exchange-httpd_keys.c @@ -519,7 +519,7 @@ check_esign_sm_pub (const struct TALER_SecurityModulePublicKeyP *sm_pub) * Helper function for #destroy_key_helpers to free all entries * in the `denom_keys` map. * - * @param cls the `struct HelperState` + * @param cls the `struct HelperDenomination` * @param h_denom_pub hash of the denomination public key * @param value the `struct HelperDenomination` to release * @return #GNUNET_OK (continue to iterate) @@ -544,7 +544,7 @@ free_denom_cb (void *cls, * Helper function for #destroy_key_helpers to free all entries * in the `esign_keys` map. * - * @param cls the `struct HelperState` + * @param cls the `struct HelperSignkey` * @param pid unused, matches the exchange public key * @param value the `struct HelperSignkey` to release * @return #GNUNET_OK (continue to iterate) @@ -582,11 +582,6 @@ destroy_key_helpers (struct HelperState *hs) hs); GNUNET_CONTAINER_multipeermap_destroy (hs->esign_keys); hs->esign_keys = NULL; - if (NULL != hs->management_keys_reply) - { - json_decref (hs->management_keys_reply); - hs->management_keys_reply = NULL; - } if (NULL != hs->dh) { TALER_CRYPTO_helper_denom_disconnect (hs->dh); @@ -597,6 +592,11 @@ destroy_key_helpers (struct HelperState *hs) TALER_CRYPTO_helper_esign_disconnect (hs->esh); hs->esh = NULL; } + if (NULL != hs->management_keys_reply) + { + json_decref (hs->management_keys_reply); + hs->management_keys_reply = NULL; + } } @@ -1777,7 +1777,7 @@ get_key_state (bool management_only) GNUNET_break (0); if (NULL != ksh) destroy_key_state (ksh, - false); + (NULL == old_ksh)); return NULL; } if (NULL != old_ksh) @@ -2463,9 +2463,6 @@ TEH_keys_management_get_handler (const struct TEH_RequestHandler *rh, GNUNET_JSON_from_data_auto (&esign_sm_pub)); GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Returning GET /management/keys response:\n"); - json_dumpf (reply, - stderr, - JSON_INDENT (2)); if (NULL == reply) return TALER_MHD_reply_with_error (connection, MHD_HTTP_INTERNAL_SERVER_ERROR, diff --git a/src/exchange/taler-exchange-httpd_management_post_keys.c b/src/exchange/taler-exchange-httpd_management_post_keys.c index 1e7936535..18f4c1b3e 100644 --- a/src/exchange/taler-exchange-httpd_management_post_keys.c +++ b/src/exchange/taler-exchange-httpd_management_post_keys.c @@ -434,6 +434,8 @@ TEH_handler_management_post_keys ( &ret, &add_keys, &akc); + GNUNET_free (akc.d_sigs); + GNUNET_free (akc.s_sigs); if (qs < 0) return ret; TEH_keys_update_states (); diff --git a/src/exchange/taler-exchange-httpd_wire.c b/src/exchange/taler-exchange-httpd_wire.c index 1942c7e4e..e01355c60 100644 --- a/src/exchange/taler-exchange-httpd_wire.c +++ b/src/exchange/taler-exchange-httpd_wire.c @@ -280,12 +280,18 @@ build_wire_state (void) } } wire_reply = json_pack ( - "{s:O, s:O, s:o}", - "accounts", wire_accounts_array, - "fees", wire_fee_object, + "{s:o, s:o, s:o}", + "accounts", + wire_accounts_array, + "fees", + wire_fee_object, "master_public_key", GNUNET_JSON_from_data_auto (&TEH_master_public_key)); - GNUNET_assert (NULL != wire_reply); + if (NULL == wire_reply) + { + GNUNET_break (0); + return NULL; + } { struct WireStateHandle *wsh; diff --git a/src/exchangedb/exchangedb_accounts.c b/src/exchangedb/exchangedb_accounts.c index 922ab6dab..e56839838 100644 --- a/src/exchangedb/exchangedb_accounts.c +++ b/src/exchangedb/exchangedb_accounts.c @@ -121,6 +121,7 @@ check_for_account (void *cls, ctx->cb (ctx->cb_cls, &ai); } + GNUNET_free (payto_uri); GNUNET_free (method); } diff --git a/src/util/crypto_helper_denom.c b/src/util/crypto_helper_denom.c index a70d071de..59fefc276 100644 --- a/src/util/crypto_helper_denom.c +++ b/src/util/crypto_helper_denom.c @@ -220,6 +220,7 @@ TALER_CRYPTO_helper_denom_connect ( strncpy (dh->sa.sun_path, unixpath, sizeof (dh->sa.sun_path) - 1); + GNUNET_free (unixpath); dh->sock = -1; { char *tmpdir; diff --git a/src/util/crypto_helper_esign.c b/src/util/crypto_helper_esign.c index 3759d0c8d..9392fe402 100644 --- a/src/util/crypto_helper_esign.c +++ b/src/util/crypto_helper_esign.c @@ -221,6 +221,7 @@ TALER_CRYPTO_helper_esign_connect ( strncpy (esh->sa.sun_path, unixpath, sizeof (esh->sa.sun_path) - 1); + GNUNET_free (unixpath); esh->sock = -1; { char *tmpdir; diff --git a/src/util/taler-exchange-secmod-eddsa.c b/src/util/taler-exchange-secmod-eddsa.c index e8670d976..1c217e0b1 100644 --- a/src/util/taler-exchange-secmod-eddsa.c +++ b/src/util/taler-exchange-secmod-eddsa.c @@ -564,6 +564,7 @@ handle_done (void *cls) (key->purge) ) free_key (key); } + GNUNET_free (wi->purpose); GNUNET_free (wi); GNUNET_assert (0 == pthread_mutex_lock (&done_lock)); } diff --git a/src/util/taler-exchange-secmod-rsa.c b/src/util/taler-exchange-secmod-rsa.c index ebd2d375b..d2e44e703 100644 --- a/src/util/taler-exchange-secmod-rsa.c +++ b/src/util/taler-exchange-secmod-rsa.c @@ -614,6 +614,8 @@ handle_done (void *cls) buf_size = GNUNET_CRYPTO_rsa_signature_encode (wi->rsa_signature, &buf); + GNUNET_CRYPTO_rsa_signature_free (wi->rsa_signature); + wi->rsa_signature = NULL; tsize = sizeof (*sr) + buf_size; GNUNET_assert (tsize < UINT16_MAX); sr = GNUNET_malloc (tsize); @@ -638,6 +640,7 @@ handle_done (void *cls) (dk->purge) ) free_dk (dk); } + GNUNET_free (wi->blinded_msg); GNUNET_free (wi); GNUNET_assert (0 == pthread_mutex_lock (&done_lock)); } -- cgit v1.2.3