check return value from TALER_JSON_hash

This commit is contained in:
Christian Grothoff 2017-10-06 20:02:28 +02:00
parent 1da03b95eb
commit 2f715c27f8
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
9 changed files with 92 additions and 47 deletions

View File

@ -606,7 +606,7 @@ struct ReserveContext
* Transaction status code, set to error codes if applicable.
*/
enum GNUNET_DB_QueryStatus qs;
};
@ -2182,8 +2182,15 @@ check_wire_out_cb (void *cls,
wcc.date = date;
TALER_amount_get_zero (amount->currency,
&wcc.total_deposits);
TALER_JSON_hash (wire,
&wcc.h_wire);
if (GNUNET_OK !=
TALER_JSON_hash (wire,
&wcc.h_wire))
{
report_row_inconsistency ("wire_out",
rowid,
"could not hash wire address");
return GNUNET_OK;
}
qs = edb->lookup_wire_transfer (edb->cls,
esession,
wtid,
@ -3170,7 +3177,7 @@ deposit_cb (void *cls,
/* This should not be possible, unless the AUDITOR
has a bug in tracking total balance. */
GNUNET_break (0);
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
return GNUNET_SYSERR;
}
@ -3191,7 +3198,7 @@ deposit_cb (void *cls,
&dfee))
{
GNUNET_break (0);
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
return GNUNET_SYSERR;
}
}
@ -3304,7 +3311,7 @@ refund_cb (void *cls,
&amount_without_fee))
{
GNUNET_break (0);
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
@ -3313,7 +3320,7 @@ refund_cb (void *cls,
&amount_without_fee))
{
GNUNET_break (0);
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
@ -3322,7 +3329,7 @@ refund_cb (void *cls,
&amount_without_fee))
{
GNUNET_break (0);
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
@ -3331,7 +3338,7 @@ refund_cb (void *cls,
&amount_without_fee))
{
GNUNET_break (0);
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
return GNUNET_SYSERR;
}
@ -3347,7 +3354,7 @@ refund_cb (void *cls,
&refund_fee))
{
GNUNET_break (0);
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
cc->qs = GNUNET_DB_STATUS_HARD_ERROR;
return GNUNET_SYSERR;
}
@ -3431,7 +3438,7 @@ analyze_coins (void *cls)
}
/* process refreshs */
if (0 >
if (0 >
(qs = edb->select_refreshs_above_serial_id (edb->cls,
esession,
pp.last_melt_serial_id,

View File

@ -883,8 +883,9 @@ spend_coin (struct Coin *coin,
dr.purpose.size = htonl (sizeof (struct TALER_DepositRequestPS));
dr.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_DEPOSIT);
dr.h_contract_terms = h_contract_terms;
TALER_JSON_hash (merchant_details,
&dr.h_wire);
GNUNET_assert (GNUNET_OK ==
TALER_JSON_hash (merchant_details,
&dr.h_wire));
dr.timestamp = GNUNET_TIME_absolute_hton (timestamp);
dr.refund_deadline = GNUNET_TIME_absolute_hton (refund_deadline);

View File

@ -415,9 +415,13 @@ TALER_EXCHANGE_deposit (struct TALER_EXCHANGE_Handle *exchange,
GNUNET_assert (GNUNET_YES ==
MAH_handle_is_ready (exchange));
/* initialize h_wire */
GNUNET_assert (GNUNET_OK ==
TALER_JSON_hash (wire_details,
&h_wire));
if (GNUNET_OK !=
TALER_JSON_hash (wire_details,
&h_wire))
{
GNUNET_break (0);
return NULL;
}
key_state = TALER_EXCHANGE_get_keys (exchange);
dki = TALER_EXCHANGE_get_denomination_key (key_state,
denom_pub);

View File

@ -354,8 +354,13 @@ parse_reserve_history (struct TALER_EXCHANGE_Handle *exchange,
}
TALER_amount_hton (&rcc.closing_amount,
&amount);
TALER_JSON_hash (rhistory[off].details.close_details.receiver_account_details,
&rcc.h_wire);
if (GNUNET_OK !=
TALER_JSON_hash (rhistory[off].details.close_details.receiver_account_details,
&rcc.h_wire))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
rcc.wtid = rhistory[off].details.close_details.wtid;
rcc.purpose.size = htonl (sizeof (rcc));
rcc.purpose.purpose = htonl (TALER_SIGNATURE_EXCHANGE_RESERVE_CLOSED);

View File

@ -1709,8 +1709,9 @@ wire_deposits_cb (void *cls,
wire = json_loads (dep->details.deposit.wire_details,
JSON_REJECT_DUPLICATES,
NULL);
TALER_JSON_hash (wire,
&hw);
GNUNET_assert (GNUNET_OK ==
TALER_JSON_hash (wire,
&hw));
json_decref (wire);
if (0 != memcmp (&hw,
h_wire,
@ -2261,8 +2262,9 @@ interpreter_run (void *cls)
fail (is);
return;
}
TALER_JSON_hash (contract_terms,
&h_contract_terms);
GNUNET_assert (GNUNET_OK ==
TALER_JSON_hash (contract_terms,
&h_contract_terms));
json_decref (contract_terms);
wire = json_loads (cmd->details.deposit.wire_details,
JSON_REJECT_DUPLICATES,
@ -2307,8 +2309,9 @@ interpreter_run (void *cls)
dr.purpose.size = htonl (sizeof (struct TALER_DepositRequestPS));
dr.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_DEPOSIT);
dr.h_contract_terms = h_contract_terms;
TALER_JSON_hash (wire,
&dr.h_wire);
GNUNET_assert (GNUNET_OK ==
TALER_JSON_hash (wire,
&dr.h_wire));
dr.timestamp = GNUNET_TIME_absolute_hton (timestamp);
dr.refund_deadline = GNUNET_TIME_absolute_hton (refund_deadline);
TALER_amount_hton (&dr.amount_with_fee,
@ -2542,15 +2545,17 @@ interpreter_run (void *cls)
JSON_REJECT_DUPLICATES,
NULL);
GNUNET_assert (NULL != wire);
TALER_JSON_hash (wire,
&h_wire);
GNUNET_assert (GNUNET_OK ==
TALER_JSON_hash (wire,
&h_wire));
json_decref (wire);
contract_terms = json_loads (ref->details.deposit.contract_terms,
JSON_REJECT_DUPLICATES,
NULL);
GNUNET_assert (NULL != contract_terms);
TALER_JSON_hash (contract_terms,
&h_contract_terms);
GNUNET_assert (GNUNET_OK ==
TALER_JSON_hash (contract_terms,
&h_contract_terms));
json_decref (contract_terms);
cmd->details.deposit_wtid.dwh
= TALER_EXCHANGE_track_transaction (exchange,
@ -2665,8 +2670,9 @@ interpreter_run (void *cls)
JSON_REJECT_DUPLICATES,
NULL);
GNUNET_assert (NULL != contract_terms);
TALER_JSON_hash (contract_terms,
&h_contract_terms);
GNUNET_assert (GNUNET_OK ==
TALER_JSON_hash (contract_terms,
&h_contract_terms));
json_decref (contract_terms);
coin = find_command (is,

View File

@ -354,7 +354,7 @@ update_fees (struct WirePlugin *wp,
struct TALER_EXCHANGEDB_Session *session)
{
enum GNUNET_DB_QueryStatus qs;
advance_fees (wp,
now);
if (NULL != wp->af)
@ -595,7 +595,7 @@ deposit_cb (void *cls,
const json_t *wire)
{
enum GNUNET_DB_QueryStatus qs;
au->merchant_pub = *merchant_pub;
if (GNUNET_SYSERR ==
TALER_amount_subtract (&au->total_amount,
@ -611,8 +611,15 @@ deposit_cb (void *cls,
au->row_id = row_id;
GNUNET_assert (NULL == au->wire);
au->wire = json_incref ((json_t *) wire);
TALER_JSON_hash (au->wire,
&au->h_wire);
if (GNUNET_OK !=
TALER_JSON_hash (au->wire,
&au->h_wire))
{
GNUNET_break (0);
json_decref (au->wire);
au->wire = NULL;
return GNUNET_DB_STATUS_HARD_ERROR;
}
GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
&au->wtid,
sizeof (au->wtid));
@ -839,7 +846,7 @@ prepare_close_cb (void *cls,
size_t buf_size)
{
enum GNUNET_DB_QueryStatus qs;
GNUNET_assert (cls == ctc);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@ -867,7 +874,7 @@ prepare_close_cb (void *cls,
buf_size);
if (GNUNET_DB_STATUS_HARD_ERROR == qs)
{
GNUNET_break (0);
GNUNET_break (0);
db_plugin->rollback (db_plugin->cls,
ctc->session);
global_ret = GNUNET_SYSERR;
@ -1093,7 +1100,7 @@ run_reserve_closures (void *cls)
enum GNUNET_DB_QueryStatus qs;
const struct GNUNET_SCHEDULER_TaskContext *tc;
struct ExpiredReserveContext erc;
task = NULL;
reserves_idle = GNUNET_NO;
tc = GNUNET_SCHEDULER_get_task_context ();
@ -1126,9 +1133,9 @@ run_reserve_closures (void *cls)
GNUNET_TIME_absolute_get (),
&expired_reserve_cb,
&erc);
switch (qs)
switch (qs)
{
case GNUNET_DB_STATUS_HARD_ERROR:
case GNUNET_DB_STATUS_HARD_ERROR:
GNUNET_break (0);
db_plugin->rollback (db_plugin->cls,
session);
@ -1290,7 +1297,7 @@ run_aggregation (void *cls)
NULL);
return;
}
/* Subtract wire transfer fee and round to the unit supported by the
wire transfer method; Check if after rounding down, we still have
an amount to transfer, and if not mark as 'tiny'. */
@ -1322,7 +1329,7 @@ run_aggregation (void *cls)
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Failed to start database transaction!\n");
global_ret = GNUNET_SYSERR;
cleanup_au ();
cleanup_au ();
GNUNET_SCHEDULER_shutdown ();
return;
}
@ -1690,7 +1697,7 @@ run_transfers (void *cls)
case GNUNET_DB_STATUS_SOFT_ERROR:
/* try again */
task = GNUNET_SCHEDULER_add_now (&run_transfers,
NULL);
NULL);
return;
case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
/* no more prepared wire transfers, go back to aggregation! */

View File

@ -718,6 +718,7 @@ TEH_RESPONSE_compile_reserve_history (const struct TALER_EXCHANGEDB_ReserveHisto
&deposit_total,
&pos->details.bank->amount))
{
GNUNET_break (0);
json_decref (json_history);
return NULL;
}
@ -748,6 +749,7 @@ TEH_RESPONSE_compile_reserve_history (const struct TALER_EXCHANGEDB_ReserveHisto
&withdraw_total,
&value))
{
GNUNET_break (0);
json_decref (json_history);
return NULL;
}
@ -782,6 +784,7 @@ TEH_RESPONSE_compile_reserve_history (const struct TALER_EXCHANGEDB_ReserveHisto
&deposit_total,
&payback->value))
{
GNUNET_break (0);
json_decref (json_history);
return NULL;
}
@ -840,8 +843,14 @@ TEH_RESPONSE_compile_reserve_history (const struct TALER_EXCHANGEDB_ReserveHisto
TALER_amount_hton (&rcc.closing_fee,
&pos->details.closing->closing_fee);
rcc.reserve_pub = pos->details.closing->reserve_pub;
TALER_JSON_hash (pos->details.closing->receiver_account_details,
&rcc.h_wire);
if (GNUNET_OK !=
TALER_JSON_hash (pos->details.closing->receiver_account_details,
&rcc.h_wire))
{
GNUNET_break (0);
json_decref (json_history);
return NULL;
}
rcc.wtid = pos->details.closing->wtid;
TEH_KS_sign (&rcc.purpose,
&pub,

View File

@ -932,7 +932,9 @@ deposit_cb (void *cls,
deposit_rowid = rowid;
if (NULL != wire)
TALER_JSON_hash (wire, &h_wire);
GNUNET_assert (GNUNET_OK ==
TALER_JSON_hash (wire,
&h_wire));
if ( (0 != memcmp (merchant_pub,
&deposit->merchant_pub,
sizeof (struct TALER_MerchantPublicKeyP))) ||
@ -1776,8 +1778,9 @@ run (void *cls)
RND_BLK (&deposit.merchant_pub);
RND_BLK (&deposit.h_contract_terms);
wire = json_loads (json_wire_str, 0, NULL);
TALER_JSON_hash (wire,
&deposit.h_wire);
GNUNET_assert (GNUNET_OK ==
TALER_JSON_hash (wire,
&deposit.h_wire));
deposit.receiver_wire_account = wire;
deposit.amount_with_fee = value;
deposit.deposit_fee = fee_deposit;

View File

@ -40,7 +40,10 @@ TALER_JSON_hash (const json_t *json,
if (NULL == (wire_enc = json_dumps (json,
JSON_COMPACT | JSON_SORT_KEYS)))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
len = strlen (wire_enc) + 1;
GNUNET_CRYPTO_hash (wire_enc,
len,