summaryrefslogtreecommitdiff
path: root/src/exchange/taler-exchange-httpd_refresh_reveal.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2018-11-25 15:38:58 +0100
committerChristian Grothoff <christian@grothoff.org>2018-11-25 15:38:58 +0100
commitf22401750505d281a092034342058fc588b62ea0 (patch)
tree8d3136b8d2f9cadadf5a552a3af21a1e26114590 /src/exchange/taler-exchange-httpd_refresh_reveal.c
parent85aa6d17c727a5899490aa82b0ece9ac95972c66 (diff)
downloadexchange-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.c20
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;
}