modify TALER_EXCHANGE_deposits_get() API to avoid NULL pointers and need for deep copies

This commit is contained in:
Christian Grothoff 2020-05-03 20:12:18 +02:00
parent cde71b7fe7
commit 4844023f69
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 21 additions and 31 deletions

View File

@ -1691,22 +1691,22 @@ struct TALER_EXCHANGE_DepositData
{ {
/** /**
* exchange key used to sign, NULL if exchange did not * exchange key used to sign, all zeros if exchange did not
* yet execute the transaction * yet execute the transaction
*/ */
const struct TALER_ExchangePublicKeyP *exchange_pub; struct TALER_ExchangePublicKeyP exchange_pub;
/** /**
* signature from the exchange over the deposit data, NULL if exchange did not * signature from the exchange over the deposit data, all zeros if exchange did not
* yet execute the transaction * yet execute the transaction
*/ */
const struct TALER_ExchangeSignatureP *exchange_sig; struct TALER_ExchangeSignatureP exchange_sig;
/** /**
* wire transfer identifier used by the exchange, NULL if exchange did not * wire transfer identifier used by the exchange, all zeros if exchange did not
* yet execute the transaction * yet execute the transaction
*/ */
const struct TALER_WireTransferIdentifierRawP *wtid; struct TALER_WireTransferIdentifierRawP wtid;
/** /**
* actual or planned execution time for the wire transfer * actual or planned execution time for the wire transfer
@ -1714,10 +1714,10 @@ struct TALER_EXCHANGE_DepositData
struct GNUNET_TIME_Absolute execution_time; struct GNUNET_TIME_Absolute execution_time;
/** /**
* contribution to the total amount by this coin, NULL if exchange did not * contribution to the total amount by this coin, all zeros if exchange did not
* yet execute the transaction * yet execute the transaction
*/ */
const struct TALER_Amount *coin_contribution; struct TALER_Amount coin_contribution;
}; };

View File

@ -146,16 +146,13 @@ handle_deposit_wtid_finished (void *cls,
break; break;
case MHD_HTTP_OK: case MHD_HTTP_OK:
{ {
struct GNUNET_TIME_Absolute execution_time; struct TALER_EXCHANGE_DepositData dd;
struct TALER_Amount coin_contribution;
struct TALER_ExchangePublicKeyP exchange_pub;
struct TALER_ExchangeSignatureP exchange_sig;
struct GNUNET_JSON_Specification spec[] = { struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_fixed_auto ("wtid", &dwh->depconf.wtid), GNUNET_JSON_spec_fixed_auto ("wtid", &dwh->depconf.wtid),
GNUNET_JSON_spec_absolute_time ("execution_time", &execution_time), GNUNET_JSON_spec_absolute_time ("execution_time", &dd.execution_time),
TALER_JSON_spec_amount ("coin_contribution", &coin_contribution), TALER_JSON_spec_amount ("coin_contribution", &dd.coin_contribution),
GNUNET_JSON_spec_fixed_auto ("exchange_sig", &exchange_sig), GNUNET_JSON_spec_fixed_auto ("exchange_sig", &dd.exchange_sig),
GNUNET_JSON_spec_fixed_auto ("exchange_pub", &exchange_pub), GNUNET_JSON_spec_fixed_auto ("exchange_pub", &dd.exchange_pub),
GNUNET_JSON_spec_end () GNUNET_JSON_spec_end ()
}; };
@ -169,14 +166,15 @@ handle_deposit_wtid_finished (void *cls,
hr.ec = TALER_EC_DEPOSITS_INVALID_BODY_BY_EXCHANGE; hr.ec = TALER_EC_DEPOSITS_INVALID_BODY_BY_EXCHANGE;
break; break;
} }
dwh->depconf.execution_time = GNUNET_TIME_absolute_hton (execution_time); dwh->depconf.execution_time = GNUNET_TIME_absolute_hton (
dd.execution_time);
TALER_amount_hton (&dwh->depconf.coin_contribution, TALER_amount_hton (&dwh->depconf.coin_contribution,
&coin_contribution); &dd.coin_contribution);
if (GNUNET_OK != if (GNUNET_OK !=
verify_deposit_wtid_signature_ok (dwh, verify_deposit_wtid_signature_ok (dwh,
j, j,
&exchange_pub, &dd.exchange_pub,
&exchange_sig)) &dd.exchange_sig))
{ {
GNUNET_break_op (0); GNUNET_break_op (0);
hr.http_status = 0; hr.http_status = 0;
@ -184,14 +182,7 @@ handle_deposit_wtid_finished (void *cls,
} }
else else
{ {
struct TALER_EXCHANGE_DepositData dd = { dd.wtid = dwh->depconf.wtid;
.exchange_pub = &exchange_pub,
.exchange_sig = &exchange_sig,
.wtid = &dwh->depconf.wtid,
.execution_time = execution_time,
.coin_contribution = &coin_contribution
};
dwh->cb (dwh->cb_cls, dwh->cb (dwh->cb_cls,
&hr, &hr,
&dd); &dd);

View File

@ -111,8 +111,7 @@ deposit_wtid_cb (void *cls,
switch (hr->http_status) switch (hr->http_status)
{ {
case MHD_HTTP_OK: case MHD_HTTP_OK:
GNUNET_assert (NULL != dd->wtid); tts->wtid = dd->wtid;
tts->wtid = *dd->wtid;
if (NULL != tts->bank_transfer_reference) if (NULL != tts->bank_transfer_reference)
{ {
const struct TALER_TESTING_Command *bank_transfer_cmd; const struct TALER_TESTING_Command *bank_transfer_cmd;
@ -140,7 +139,7 @@ deposit_wtid_cb (void *cls,
} }
/* Compare that expected and gotten subjects match. */ /* Compare that expected and gotten subjects match. */
if (0 != GNUNET_memcmp (dd->wtid, if (0 != GNUNET_memcmp (&dd->wtid,
wtid_want)) wtid_want))
{ {
GNUNET_break (0); GNUNET_break (0);