exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

commit 17d62b32745769195aa9a98223811ceebf149c91
parent 0ae37f324356f916fdb10380e17a3ce9aec37b68
Author: Christian Grothoff <christian@grothoff.org>
Date:   Mon, 29 Jun 2026 18:44:31 +0200

bugfixes

Diffstat:
Msrc/auditor/taler-helper-auditor-coins.c | 4++--
Msrc/auditordb/get_row_inconsistency.c | 18+++++++++---------
Msrc/bank-lib/fakebank_twg_history.c | 2+-
Msrc/lib/exchange_api_handle.c | 17+++++++++++------
Msrc/lib/exchange_api_post-batch-deposit.c | 9++-------
Msrc/lib/exchange_api_post-melt.c | 8++++----
6 files changed, 29 insertions(+), 29 deletions(-)

diff --git a/src/auditor/taler-helper-auditor-coins.c b/src/auditor/taler-helper-auditor-coins.c @@ -2640,8 +2640,8 @@ analyze_coins (void *cls) } if (0 > iqs) { - GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs); - return qs; + GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == iqs); + return iqs; } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Analyzing coins\n"); diff --git a/src/auditordb/get_row_inconsistency.c b/src/auditordb/get_row_inconsistency.c @@ -151,17 +151,17 @@ TALER_AUDITORDB_get_row_inconsistency ( " FROM auditor_row_inconsistency" " WHERE (row_id > $1)" " AND ($2 OR suppressed is false)" - " ORDER BY row_id DESC" + " ORDER BY row_id ASC" " LIMIT $3" ); - qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn, - (limit > 0) ? - "auditor_row_inconsistency_select_asc" - : - "auditor_row_inconsistency_select_desc", - params, - &row_inconsistency_cb, - &dcc); + qs = GNUNET_PQ_eval_prepared_multi_select ( + pg->conn, + (limit > 0) + ? "auditor_row_inconsistency_select_asc" + : "auditor_row_inconsistency_select_desc", + params, + &row_inconsistency_cb, + &dcc); if (qs > 0) diff --git a/src/bank-lib/fakebank_twg_history.c b/src/bank-lib/fakebank_twg_history.c @@ -127,7 +127,7 @@ TALER_FAKEBANK_twg_get_debit_history_ ( bool skip = true; dir = (0 > hc->ha.delta) ? (h->ram_limit - 1) : 1; - overflow = (t->row_id != hc->ha.start_idx); + overflow = (NULL != t) && (t->row_id != hc->ha.start_idx); /* If account does not match, linear scan for first matching account. */ while ( (! overflow) && diff --git a/src/lib/exchange_api_handle.c b/src/lib/exchange_api_handle.c @@ -517,8 +517,6 @@ parse_json_auditor (struct TALER_EXCHANGE_AuditorInformation *auditor, #endif return GNUNET_SYSERR; } - auditor->auditor_url = GNUNET_strdup (auditor_url); - auditor->auditor_name = GNUNET_strdup (auditor_name); auditor->denom_keys = GNUNET_new_array (json_array_size (keys), struct TALER_EXCHANGE_AuditorDenominationInfo); @@ -578,6 +576,7 @@ parse_json_auditor (struct TALER_EXCHANGE_AuditorInformation *auditor, &auditor_sig)) { GNUNET_break_op (0); + GNUNET_free (auditor->denom_keys); return GNUNET_SYSERR; } } @@ -588,9 +587,12 @@ parse_json_auditor (struct TALER_EXCHANGE_AuditorInformation *auditor, if (pos > UINT_MAX) { GNUNET_break (0); + GNUNET_free (auditor->denom_keys); return GNUNET_SYSERR; } auditor->num_denom_keys = (unsigned int) pos; + auditor->auditor_url = GNUNET_strdup (auditor_url); + auditor->auditor_name = GNUNET_strdup (auditor_name); return GNUNET_OK; } @@ -900,7 +902,9 @@ parse_wads (const json_t *wads_array, * @param[out] key_data where to store the results we decoded * @param[out] vc where to store version compatibility data * @return #GNUNET_OK on success, #GNUNET_SYSERR on error - * (malformed JSON) + * (malformed JSON); on #GNUNET_SYSERR, the @a key_data + * structure may be partially initialized and must still + * be released using #TALER_EXCHANGE_keys_decref()! */ enum GNUNET_GenericReturnValue TALER_EXCHANGE_decode_keys_json_ ( @@ -1721,6 +1725,9 @@ TALER_EXCHANGE_keys_from_json (const json_t *j) return NULL; /* unsupported version */ } keys = GNUNET_new (struct TALER_EXCHANGE_Keys); + keys->rc = 1; + keys->key_data_expiration = expire; + keys->exchange_url = GNUNET_strdup (url); if (GNUNET_OK != TALER_EXCHANGE_decode_keys_json_ (jkeys, false, @@ -1728,11 +1735,9 @@ TALER_EXCHANGE_keys_from_json (const json_t *j) &compat)) { GNUNET_break (0); + TALER_EXCHANGE_keys_decref (keys); return NULL; } - keys->rc = 1; - keys->key_data_expiration = expire; - keys->exchange_url = GNUNET_strdup (url); return keys; } diff --git a/src/lib/exchange_api_post-batch-deposit.c b/src/lib/exchange_api_post-batch-deposit.c @@ -138,7 +138,8 @@ struct TALER_EXCHANGE_PostBatchDepositHandle struct TALER_MerchantWireHashP h_wire; /** - * Hash over the extensions, or all zero. + * Hash over "policy extensions" which were removed as a feature. + * For now always all zeros! */ struct TALER_ExtensionPolicyHashP h_policy; @@ -639,9 +640,6 @@ TALER_EXCHANGE_post_batch_deposit_create ( num_cdds * sizeof (*cdds)); dh->num_cdds = num_cdds; dh->dcd = *dcd; - if (NULL != dcd->policy_details) - TALER_deposit_policy_hash (dcd->policy_details, - &dh->h_policy); TALER_merchant_wire_signature_hash (dcd->merchant_payto_uri, &dcd->wire_salt, &dh->h_wire); @@ -745,9 +743,6 @@ TALER_EXCHANGE_post_batch_deposit_create ( GNUNET_JSON_pack_allow_null ( GNUNET_JSON_pack_data_auto ("wallet_data_hash", wallet_data_hashp)), - GNUNET_JSON_pack_allow_null ( - GNUNET_JSON_pack_object_steal ("policy", - (json_t *) dcd->policy_details)), GNUNET_JSON_pack_timestamp ("timestamp", dcd->wallet_timestamp), GNUNET_JSON_pack_data_auto ("merchant_pub", diff --git a/src/lib/exchange_api_post-melt.c b/src/lib/exchange_api_post-melt.c @@ -481,9 +481,9 @@ fail_mh (struct TALER_EXCHANGE_PostMeltHandle *mh, * @param bpr response details */ static void -blinding_prepare_cb (void *cls, - const struct TALER_EXCHANGE_PostBlindingPrepareResponse * - bpr) +blinding_prepare_cb ( + void *cls, + const struct TALER_EXCHANGE_PostBlindingPrepareResponse *bpr) { struct TALER_EXCHANGE_PostMeltHandle *mh = cls; unsigned int nks_off = 0; @@ -616,7 +616,7 @@ TALER_EXCHANGE_post_melt_start ( } TALER_cs_refresh_seed_to_blinding_seed ( &mh->rms, - &mh->md.melted_coin.coin_priv, + &mh->rd->melt_priv, &mh->blinding_seed); mh->bpr = TALER_EXCHANGE_post_blinding_prepare_for_melt_create ( mh->cctx,