[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-exchange] branch master updated: misc age-restriction related mem
From: |
gnunet |
Subject: |
[taler-exchange] branch master updated: misc age-restriction related memory leak fixes, plus FIXME-Oec as some leaks remain |
Date: |
Sun, 29 Oct 2023 23:06:52 +0100 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository exchange.
The following commit(s) were added to refs/heads/master by this push:
new fc7800d3 misc age-restriction related memory leak fixes, plus
FIXME-Oec as some leaks remain
fc7800d3 is described below
commit fc7800d320d5508a1bada7dc47d60cc46a96200f
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun Oct 29 23:06:48 2023 +0100
misc age-restriction related memory leak fixes, plus FIXME-Oec as some
leaks remain
---
src/exchange/taler-exchange-httpd_age-withdraw.c | 15 ++++--
.../taler-exchange-httpd_age-withdraw_reveal.c | 15 +++---
.../taler-exchange-httpd_refreshes_reveal.c | 2 +-
src/exchangedb/pg_get_age_withdraw.c | 10 +---
src/pq/pq_result_helper.c | 54 ++++++++++++++--------
src/util/age_restriction.c | 2 -
6 files changed, 58 insertions(+), 40 deletions(-)
diff --git a/src/exchange/taler-exchange-httpd_age-withdraw.c
b/src/exchange/taler-exchange-httpd_age-withdraw.c
index 56065dda..bcbb7156 100644
--- a/src/exchange/taler-exchange-httpd_age-withdraw.c
+++ b/src/exchange/taler-exchange-httpd_age-withdraw.c
@@ -231,11 +231,17 @@ parse_age_withdraw_json (
json_array_foreach (j_kappa_coin_evs, kappa, value) {
struct GNUNET_JSON_Specification spec[] = {
- TALER_JSON_spec_blinded_planchet (NULL, &awc->coin_evs[off + kappa]),
+ /* FIXME-Oec: This allocation is never freed! */
+ TALER_JSON_spec_blinded_planchet (NULL,
+ &awc->coin_evs[off + kappa]),
GNUNET_JSON_spec_end ()
};
+
if (GNUNET_OK !=
- GNUNET_JSON_parse (value, spec, NULL, NULL))
+ GNUNET_JSON_parse (value,
+ spec,
+ NULL,
+ NULL))
{
GNUNET_snprintf (buf,
sizeof(buf),
@@ -249,12 +255,11 @@ parse_age_withdraw_json (
/* Continue to hash of the coin candidates */
{
struct TALER_BlindedCoinHashP bch;
+
ret = TALER_coin_ev_hash (&awc->coin_evs[off + kappa],
&awc->denom_hs[idx],
&bch);
-
GNUNET_assert (GNUNET_OK == ret);
-
GNUNET_CRYPTO_hash_context_read (hash_context,
&bch,
sizeof(bch));
@@ -830,7 +835,7 @@ age_withdraw_transaction (void *cls,
* @param connection HTTP-connection to the client
* @param awc The context for the current age withdraw request
* @param[out] result On error, a HTTP-response will be queued and result set
accordingly
- * @return GNUNET_OK on success, GNUNET_SYSERR otherwise
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise
*/
static enum GNUNET_GenericReturnValue
sign_and_do_age_withdraw (
diff --git a/src/exchange/taler-exchange-httpd_age-withdraw_reveal.c
b/src/exchange/taler-exchange-httpd_age-withdraw_reveal.c
index 7463d222..9b9f1cb8 100644
--- a/src/exchange/taler-exchange-httpd_age-withdraw_reveal.c
+++ b/src/exchange/taler-exchange-httpd_age-withdraw_reveal.c
@@ -194,8 +194,8 @@ EXIT:
* @param reserve_pub Reserve public key used in the original age-withdraw
request
* @param[out] commitment Data from the original age-withdraw request
* @param[out] result In the error cases, a response will be queued with MHD
and this will be the result.
- * @return GNUNET_OK if the withdraw request has been found,
- * GNUNET_SYSERROR if we did not find the request in the DB
+ * @return #GNUNET_OK if the withdraw request has been found,
+ * #GNUNET_SYSERR if we did not find the request in the DB
*/
static enum GNUNET_GenericReturnValue
find_original_commitment (
@@ -217,20 +217,17 @@ find_original_commitment (
{
case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
return GNUNET_OK; /* Only happy case */
-
case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
*result = TALER_MHD_reply_with_error (connection,
MHD_HTTP_NOT_FOUND,
TALER_EC_EXCHANGE_AGE_WITHDRAW_COMMITMENT_UNKNOWN,
NULL);
return GNUNET_SYSERR;
-
case GNUNET_DB_STATUS_HARD_ERROR:
*result = TALER_MHD_reply_with_ec (connection,
TALER_EC_GENERIC_DB_FETCH_FAILED,
"get_age_withdraw_info");
return GNUNET_SYSERR;
-
case GNUNET_DB_STATUS_SOFT_ERROR:
break; /* try again */
default:
@@ -300,6 +297,7 @@ calculate_blinded_hash (
&acp);
TALER_age_commitment_hash (&acp.commitment,
&ach);
+ TALER_age_commitment_proof_free (&acp);
}
/* Next: calculate planchet */
@@ -362,7 +360,7 @@ calculate_blinded_hash (
ret = TALER_coin_ev_hash (&detail.blinded_planchet,
&denom_key->h_denom_pub,
bch);
-
+ TALER_blinded_planchet_free (&detail.blinded_planchet);
GNUNET_assert (GNUNET_OK == ret);
}
@@ -599,6 +597,11 @@ TEH_handler_age_withdraw_reveal (
} while(0);
GNUNET_JSON_parse_free (spec);
+ for (unsigned int i = 0; i<actx.num_coins; i++)
+ TALER_blinded_denom_sig_free (&actx.commitment.denom_sigs[i]);
+ GNUNET_free (actx.commitment.denom_sigs);
+ GNUNET_free (actx.commitment.denom_pub_hashes);
+ GNUNET_free (actx.commitment.denom_serials);
GNUNET_free (actx.disclosed_coin_secrets);
return result;
}
diff --git a/src/exchange/taler-exchange-httpd_refreshes_reveal.c
b/src/exchange/taler-exchange-httpd_refreshes_reveal.c
index 0509bc90..5630051c 100644
--- a/src/exchange/taler-exchange-httpd_refreshes_reveal.c
+++ b/src/exchange/taler-exchange-httpd_refreshes_reveal.c
@@ -314,9 +314,9 @@ check_commitment (struct RevealContext *rctx,
&acp,
&ts.key,
&nacp));
-
TALER_age_commitment_hash (&nacp.commitment,
&h);
+ TALER_age_commitment_proof_free (&nacp);
hac = &h;
}
diff --git a/src/exchangedb/pg_get_age_withdraw.c
b/src/exchangedb/pg_get_age_withdraw.c
index 6247fd14..9a80f189 100644
--- a/src/exchangedb/pg_get_age_withdraw.c
+++ b/src/exchangedb/pg_get_age_withdraw.c
@@ -61,22 +61,16 @@ TEH_PG_get_age_withdraw (
TALER_PQ_result_spec_array_blinded_denom_sig (
pg->conn,
"denom_sigs",
- NULL, /* we assume that this is the same size as h_coin_evs */
+ NULL, /* FIXME-Oec: this assumes that this is the same size as
h_coin_evs, but we should check! */
&aw->denom_sigs),
TALER_PQ_result_spec_array_denom_hash (
pg->conn,
"denom_pub_hashes",
- NULL, /* we assume that this is the same size as h_coin_evs */
+ NULL, /* FIXME-Oec: this assumes that this is the same size as
h_coin_evs, but we should check! */
&aw->denom_pub_hashes),
GNUNET_PQ_result_spec_end
};
- GNUNET_assert (NULL != aw);
-
- /* Used in #postgres_get_age_withdraw() to
- locate the response for a /reserve/$RESERVE_PUB/age-withdraw request
- using the hash of the blinded message. Also needed to ensure
- idempotency of /reserve/$RESERVE_PUB/age-withdraw requests. */
PREPARE (pg,
"get_age_withdraw",
"SELECT"
diff --git a/src/pq/pq_result_helper.c b/src/pq/pq_result_helper.c
index c32e0d0e..6f433866 100644
--- a/src/pq/pq_result_helper.c
+++ b/src/pq/pq_result_helper.c
@@ -1068,29 +1068,44 @@ TALER_PQ_result_spec_exchange_withdraw_values (
*/
struct ArrayResultCls
{
- /* Oid of the expected type, must match the oid in the header of the
PQResult struct */
+ /**
+ * Oid of the expected type, must match the oid in the header of the
PQResult struct
+ */
Oid oid;
- /* Target type */
+ /**
+ * Target type
+ */
enum TALER_PQ_ArrayType typ;
- /* If not 0, defines the expected size of each entry */
+ /**
+ * If not 0, defines the expected size of each entry
+ */
size_t same_size;
- /* Out-pointer to write the number of elements in the array */
+ /**
+ * Out-pointer to write the number of elements in the array
+ */
size_t *num;
- /* Out-pointer. If @a typ is TALER_PQ_array_of_byte and @a same_size is 0,
- * allocate and put the array of @a num sizes here. NULL otherwise */
+ /**
+ * Out-pointer. If @a typ is TALER_PQ_array_of_byte and @a same_size is 0,
+ * allocate and put the array of @a num sizes here. NULL otherwise
+ */
size_t **sizes;
- /* DB_connection, needed for OID-lookup for composite types */
+ /**
+ * DB_connection, needed for OID-lookup for composite types
+ */
const struct GNUNET_PQ_Context *db;
- /* Currency information for amount composites */
+ /**
+ * Currency information for amount composites
+ */
char currency[TALER_CURRENCY_LEN];
};
+
/**
* Extract data from a Postgres database @a result as array of a specific type
* from row @a row. The type information and optionally additional
@@ -1175,7 +1190,8 @@ extract_array_generic (
if (NULL != dst_size)
*dst_size = sizeof(struct TALER_Amount) * (header.dim);
- amounts = GNUNET_new_array (header.dim, struct TALER_Amount);
+ amounts = GNUNET_new_array (header.dim,
+ struct TALER_Amount);
*((void **) dst) = amounts;
for (uint32_t i = 0; i < header.dim; i++)
@@ -1212,7 +1228,8 @@ extract_array_generic (
case TALER_PQ_array_of_denom_hash:
if (NULL != dst_size)
*dst_size = sizeof(struct TALER_DenominationHashP) * (header.dim);
- out = GNUNET_new_array (header.dim, struct TALER_DenominationHashP);
+ out = GNUNET_new_array (header.dim,
+ struct TALER_DenominationHashP);
*((void **) dst) = out;
for (uint32_t i = 0; i < header.dim; i++)
{
@@ -1235,7 +1252,8 @@ extract_array_generic (
case TALER_PQ_array_of_blinded_coin_hash:
if (NULL != dst_size)
*dst_size = sizeof(struct TALER_BlindedCoinHashP) * (header.dim);
- out = GNUNET_new_array (header.dim, struct TALER_BlindedCoinHashP);
+ out = GNUNET_new_array (header.dim,
+ struct TALER_BlindedCoinHashP);
*((void **) dst) = out;
for (uint32_t i = 0; i < header.dim; i++)
{
@@ -1294,12 +1312,13 @@ extract_array_generic (
sz -= sizeof(be);
bs = GNUNET_new (struct GNUNET_CRYPTO_BlindedSignature);
bs->cipher = ntohl (be[0]);
+ bs->rc = 1;
switch (bs->cipher)
{
case GNUNET_CRYPTO_BSA_RSA:
- bs->details.blinded_rsa_signature =
- GNUNET_CRYPTO_rsa_signature_decode (in,
- sz);
+ bs->details.blinded_rsa_signature
+ = GNUNET_CRYPTO_rsa_signature_decode (in,
+ sz);
if (NULL == bs->details.blinded_rsa_signature)
{
GNUNET_free (bs);
@@ -1329,12 +1348,10 @@ extract_array_generic (
FAIL_IF (true);
}
}
-
FAIL:
GNUNET_free (*(void **) dst);
return GNUNET_SYSERR;
- #undef FAIL_IF
-
+#undef FAIL_IF
}
@@ -1345,10 +1362,11 @@ static void
array_cleanup (void *cls,
void *rd)
{
-
struct ArrayResultCls *info = cls;
void **dst = rd;
+ /* FIXME-Oec: this does not properly clean up
+ denomination signatures! */
if ((0 == info->same_size) &&
(NULL != info->sizes))
GNUNET_free (*(info->sizes));
diff --git a/src/util/age_restriction.c b/src/util/age_restriction.c
index 883ae5e9..f79c767a 100644
--- a/src/util/age_restriction.c
+++ b/src/util/age_restriction.c
@@ -671,11 +671,9 @@ TALER_age_restriction_from_secret (
ncp->commitment.num = num_pub;
ncp->proof.num = num_priv;
ncp->proof.keys = NULL;
-
ncp->commitment.keys = GNUNET_new_array (
num_pub,
struct TALER_AgeCommitmentPublicKeyP);
-
if (0 < num_priv)
ncp->proof.keys = GNUNET_new_array (
num_priv,
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-exchange] branch master updated: misc age-restriction related memory leak fixes, plus FIXME-Oec as some leaks remain,
gnunet <=