diff options
author | Christian Grothoff <christian@grothoff.org> | 2018-11-25 15:38:58 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2018-11-25 15:38:58 +0100 |
commit | f22401750505d281a092034342058fc588b62ea0 (patch) | |
tree | 8d3136b8d2f9cadadf5a552a3af21a1e26114590 /src/exchange/taler-exchange-httpd_refresh_reveal.c | |
parent | 85aa6d17c727a5899490aa82b0ece9ac95972c66 (diff) | |
download | exchange-f22401750505d281a092034342058fc588b62ea0.tar.gz exchange-f22401750505d281a092034342058fc588b62ea0.tar.bz2 exchange-f22401750505d281a092034342058fc588b62ea0.zip |
fix a few more leaks
Diffstat (limited to 'src/exchange/taler-exchange-httpd_refresh_reveal.c')
-rw-r--r-- | src/exchange/taler-exchange-httpd_refresh_reveal.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/exchange/taler-exchange-httpd_refresh_reveal.c b/src/exchange/taler-exchange-httpd_refresh_reveal.c index 39e17df17..8ac8636d9 100644 --- a/src/exchange/taler-exchange-httpd_refresh_reveal.c +++ b/src/exchange/taler-exchange-httpd_refresh_reveal.c @@ -251,6 +251,20 @@ refresh_reveal_preflight (void *cls, /** + * Helper function for #refresh_reveal_transaction() to free internal + * state of @a refresh_melt (but not the pointer itself!). + * + * @param refresh_melt memory to clean up + */ +static void +free_refresh_melt (struct TALER_EXCHANGEDB_RefreshMelt *refresh_melt) +{ + GNUNET_CRYPTO_rsa_signature_free (refresh_melt->session.coin.denom_sig.rsa_signature); + GNUNET_CRYPTO_rsa_public_key_free (refresh_melt->session.coin.denom_pub.rsa_public_key); +} + + +/** * Execute a "/refresh/reveal". The client is revealing to us the * transfer keys for @a #TALER_CNC_KAPPA-1 sets of coins. Verify that the * revealed transfer keys would allow linkage to the blinded coins. @@ -299,6 +313,8 @@ refresh_reveal_transaction (void *cls, GNUNET_break (0); *mhd_ret = TEH_RESPONSE_reply_internal_db_error (connection, TALER_EC_REFRESH_REVEAL_DB_FETCH_SESSION_ERROR); + if (refresh_melt.session.noreveal_index >= TALER_CNC_KAPPA) + free_refresh_melt (&refresh_melt); return GNUNET_DB_STATUS_HARD_ERROR; } @@ -385,6 +401,7 @@ refresh_reveal_transaction (void *cls, GNUNET_break_op (0); *mhd_ret = reply_refresh_reveal_missmatch (connection, &rc_expected); + free_refresh_melt (&refresh_melt); return GNUNET_DB_STATUS_HARD_ERROR; } } /* end of checking "rc_expected" */ @@ -417,6 +434,7 @@ refresh_reveal_transaction (void *cls, *mhd_ret = TEH_RESPONSE_reply_internal_error (connection, TALER_EC_REFRESH_REVEAL_COST_CALCULATION_OVERFLOW, "failed to add up refresh costs"); + free_refresh_melt (&refresh_melt); return GNUNET_DB_STATUS_HARD_ERROR; } } @@ -427,9 +445,11 @@ refresh_reveal_transaction (void *cls, *mhd_ret = TEH_RESPONSE_reply_external_error (connection, TALER_EC_REFRESH_REVEAL_AMOUNT_INSUFFICIENT, "melted coin value is insufficient to cover cost of operation"); + free_refresh_melt (&refresh_melt); return GNUNET_DB_STATUS_HARD_ERROR; } } + free_refresh_melt (&refresh_melt); return GNUNET_DB_STATUS_SUCCESS_NO_RESULTS; } |