From 28f790fac5af5d801d5cb7bd3cdfe53f0ac948d2 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 15 Jul 2019 21:44:03 +0200 Subject: fix use of index in testing_api_cmd_refresh.c --- src/lib/testing_api_cmd_refresh.c | 153 ++++++++++++++++++++------------------ 1 file changed, 79 insertions(+), 74 deletions(-) (limited to 'src/lib/testing_api_cmd_refresh.c') diff --git a/src/lib/testing_api_cmd_refresh.c b/src/lib/testing_api_cmd_refresh.c index d0b589b1..3a4de783 100644 --- a/src/lib/testing_api_cmd_refresh.c +++ b/src/lib/testing_api_cmd_refresh.c @@ -83,7 +83,7 @@ struct RefreshMeltState /** * Array of the denomination public keys - * corresponding to the @e fresh_amounts. + * corresponding to the @e num_fresh_coins; */ struct TALER_EXCHANGE_DenomPublicKey *fresh_pks; @@ -102,6 +102,11 @@ struct RefreshMeltState */ size_t refresh_data_length; + /** + * Number of fresh coins generated by the melt. + */ + unsigned int num_fresh_coins; + /** * Expected HTTP response code. */ @@ -282,7 +287,7 @@ do_reveal_retry (void *cls) static void reveal_cb (void *cls, unsigned int http_status, - enum TALER_ErrorCode ec, + enum TALER_ErrorCode ec, unsigned int num_coins, const struct TALER_CoinSpendPrivateKeyP *coin_privs, const struct TALER_DenominationSignature *sigs, @@ -340,24 +345,19 @@ reveal_cb (void *cls, case MHD_HTTP_OK: rrs->fresh_coins = GNUNET_new_array (num_coins, struct FreshCoin); - - const struct TALER_EXCHANGE_DenomPublicKey *fresh_pks; - - if (GNUNET_OK != - TALER_TESTING_get_trait_denom_pub (melt_cmd, - 0, - &fresh_pks)) - { - GNUNET_break (0); - TALER_TESTING_interpreter_fail (rrs->is); - return; - } - for (unsigned int i=0; ifresh_coins[i]; - fc->pk = &fresh_pks[i]; + if (GNUNET_OK != + TALER_TESTING_get_trait_denom_pub (melt_cmd, + i, + &fc->pk)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (rrs->is); + return; + } fc->coin_priv = coin_privs[i]; fc->sig.rsa_signature = GNUNET_CRYPTO_rsa_signature_dup (sigs[i].rsa_signature); @@ -611,18 +611,18 @@ link_cb (void *cls, for (unsigned int i=0;ikey.rsa_public_key, - pubs[j].rsa_public_key)) ) - { - found++; - break; - } + if ( (0 == GNUNET_memcmp + (&coin_privs[i], &fc[j].coin_priv)) && + (0 == GNUNET_CRYPTO_rsa_signature_cmp + (fc[i].sig.rsa_signature, + sigs[j].rsa_signature)) && + (0 == GNUNET_CRYPTO_rsa_public_key_cmp + (fc[i].pk->key.rsa_public_key, + pubs[j].rsa_public_key)) ) + { + found++; + break; + } } if (found != num_coins) { @@ -883,7 +883,7 @@ refresh_melt_run (void *cls, for (num_fresh_coins=0; NULL != melt_fresh_amounts[num_fresh_coins]; num_fresh_coins++) ; - + rms->num_fresh_coins = num_fresh_coins; rms->fresh_pks = GNUNET_new_array (num_fresh_coins, struct TALER_EXCHANGE_DenomPublicKey); @@ -935,13 +935,12 @@ refresh_melt_run (void *cls, return; } if (GNUNET_OK != TALER_TESTING_get_trait_denom_pub - (coin_command, 0, &melt_denom_pub)) + (coin_command, 0, &melt_denom_pub)) { GNUNET_break (0); TALER_TESTING_interpreter_fail (rms->is); return; } - for (unsigned int i=0;ifresh_pks), - TALER_TESTING_trait_end () - }; - - return TALER_TESTING_get_trait (traits, - ret, - trait, - index); + if (index >= rms->num_fresh_coins) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + { + struct TALER_TESTING_Trait traits[] = { + TALER_TESTING_make_trait_denom_pub (index, &rms->fresh_pks[index]), + TALER_TESTING_trait_end () + }; + + return TALER_TESTING_get_trait (traits, + ret, + trait, + index); + } } @@ -1081,20 +1086,20 @@ TALER_TESTING_cmd_refresh_melt md.coin_reference = coin_reference; md.amount = amount; - rms = GNUNET_new (struct RefreshMeltState); rms->melted_coin = md; rms->expected_response_code = expected_response_code; - - struct TALER_TESTING_Command cmd = { - .label = label, - .cls = rms, - .run = &refresh_melt_run, - .cleanup = &refresh_melt_cleanup, - .traits = &refresh_melt_traits - }; - - return cmd; + { + struct TALER_TESTING_Command cmd = { + .label = label, + .cls = rms, + .run = &refresh_melt_run, + .cleanup = &refresh_melt_cleanup, + .traits = &refresh_melt_traits + }; + + return cmd; + } } @@ -1109,7 +1114,6 @@ TALER_TESTING_cmd_refresh_melt * @param coin_reference reference to a command that will provide * a coin to refresh * @param expected_response_code expected HTTP code - * * @return the command. */ struct TALER_TESTING_Command @@ -1124,21 +1128,21 @@ TALER_TESTING_cmd_refresh_melt_double md.coin_reference = coin_reference; md.amount = amount; - rms = GNUNET_new (struct RefreshMeltState); rms->melted_coin = md; rms->expected_response_code = expected_response_code; rms->double_melt = GNUNET_YES; - - struct TALER_TESTING_Command cmd = { - .label = label, - .cls = rms, - .run = &refresh_melt_run, - .cleanup = &refresh_melt_cleanup, - .traits = &refresh_melt_traits - }; - - return cmd; + { + struct TALER_TESTING_Command cmd = { + .label = label, + .cls = rms, + .run = &refresh_melt_run, + .cleanup = &refresh_melt_cleanup, + .traits = &refresh_melt_traits + }; + + return cmd; + } } @@ -1237,16 +1241,17 @@ TALER_TESTING_cmd_refresh_reveal rrs = GNUNET_new (struct RefreshRevealState); rrs->melt_reference = melt_reference; rrs->expected_response_code = expected_response_code; - - struct TALER_TESTING_Command cmd = { - .cls = rrs, - .label = label, - .run = &refresh_reveal_run, - .cleanup = &refresh_reveal_cleanup, - .traits = &refresh_reveal_traits - }; - - return cmd; + { + struct TALER_TESTING_Command cmd = { + .cls = rrs, + .label = label, + .run = &refresh_reveal_run, + .cleanup = &refresh_reveal_cleanup, + .traits = &refresh_reveal_traits + }; + + return cmd; + } } -- cgit v1.2.3