diff --git a/src/bank-lib/fakebank.c b/src/bank-lib/fakebank.c index 13bfa1cb5..c4934fd27 100644 --- a/src/bank-lib/fakebank.c +++ b/src/bank-lib/fakebank.c @@ -192,6 +192,15 @@ TALER_FAKEBANK_check_empty (struct TALER_FAKEBANK_Handle *h) void TALER_FAKEBANK_stop (struct TALER_FAKEBANK_Handle *h) { + struct Transaction *t; + + while (NULL != (t = h->transactions_head)) + { + GNUNET_CONTAINER_DLL_remove (h->transactions_head, + h->transactions_tail, + t); + GNUNET_free (t); + } if (NULL != h->mhd_task) { GNUNET_SCHEDULER_cancel (h->mhd_task); diff --git a/src/exchange-lib/exchange_api_refresh.c b/src/exchange-lib/exchange_api_refresh.c index 98c6c086b..9a9c6b7eb 100644 --- a/src/exchange-lib/exchange_api_refresh.c +++ b/src/exchange-lib/exchange_api_refresh.c @@ -1563,14 +1563,14 @@ refresh_reveal_ok (struct TALER_EXCHANGE_RefreshRevealHandle *rrh, { unsigned int i; json_t *jsona; - struct GNUNET_JSON_Specification spec[] = { + struct GNUNET_JSON_Specification outer_spec[] = { GNUNET_JSON_spec_json ("ev_sigs", &jsona), GNUNET_JSON_spec_end() }; if (GNUNET_OK != GNUNET_JSON_parse (json, - spec, + outer_spec, NULL, NULL)) { GNUNET_break_op (0); @@ -1580,12 +1580,14 @@ refresh_reveal_ok (struct TALER_EXCHANGE_RefreshRevealHandle *rrh, { /* We expected an array of coins */ GNUNET_break_op (0); + GNUNET_JSON_parse_free (outer_spec); return GNUNET_SYSERR; } if (rrh->md->num_fresh_coins != json_array_size (jsona)) { /* Number of coins generated does not match our expectation */ GNUNET_break_op (0); + GNUNET_JSON_parse_free (outer_spec); return GNUNET_SYSERR; } for (i=0;imd->num_fresh_coins;i++) @@ -1597,7 +1599,6 @@ refresh_reveal_ok (struct TALER_EXCHANGE_RefreshRevealHandle *rrh, struct GNUNET_CRYPTO_RsaSignature *sig; struct TALER_CoinSpendPublicKeyP coin_pub; struct GNUNET_HashCode coin_hash; - struct GNUNET_JSON_Specification spec[] = { GNUNET_JSON_spec_rsa_signature ("ev_sig", &blind_sig), GNUNET_JSON_spec_end() @@ -1614,6 +1615,7 @@ refresh_reveal_ok (struct TALER_EXCHANGE_RefreshRevealHandle *rrh, NULL, NULL)) { GNUNET_break_op (0); + GNUNET_JSON_parse_free (outer_spec); return GNUNET_SYSERR; } @@ -1637,11 +1639,13 @@ refresh_reveal_ok (struct TALER_EXCHANGE_RefreshRevealHandle *rrh, { GNUNET_break_op (0); GNUNET_CRYPTO_rsa_signature_free (sig); + GNUNET_JSON_parse_free (outer_spec); return GNUNET_SYSERR; } coin_privs[i] = fc->coin_priv; sigs[i].rsa_signature = sig; } + GNUNET_JSON_parse_free (outer_spec); return GNUNET_OK; } diff --git a/src/exchange-lib/exchange_api_reserve.c b/src/exchange-lib/exchange_api_reserve.c index 2b07223af..926157a86 100644 --- a/src/exchange-lib/exchange_api_reserve.c +++ b/src/exchange-lib/exchange_api_reserve.c @@ -115,7 +115,7 @@ parse_reserve_history (const json_t *history, struct GNUNET_JSON_Specification hist_spec[] = { GNUNET_JSON_spec_string ("type", &type), TALER_JSON_spec_amount ("amount", - &amount), + &amount), /* 'wire' and 'signature' are optional depending on 'type'! */ GNUNET_JSON_spec_end() }; @@ -185,9 +185,9 @@ parse_reserve_history (const json_t *history, struct TALER_Amount amount_from_purpose; struct GNUNET_JSON_Specification withdraw_spec[] = { GNUNET_JSON_spec_fixed_auto ("signature", - &sig), + &sig), GNUNET_JSON_spec_fixed_auto ("details", - &withdraw_purpose), + &withdraw_purpose), GNUNET_JSON_spec_end() }; unsigned int i; diff --git a/src/exchange-lib/exchange_api_track_transfer.c b/src/exchange-lib/exchange_api_track_transfer.c index 417d065f0..4cfd07361 100644 --- a/src/exchange-lib/exchange_api_track_transfer.c +++ b/src/exchange-lib/exchange_api_track_transfer.c @@ -138,6 +138,7 @@ check_track_transfer_response_ok (struct TALER_EXCHANGE_TrackTransferHandle *wdh { GNUNET_break_op (0); GNUNET_CRYPTO_hash_context_abort (hash_context); + GNUNET_JSON_parse_free (spec); return GNUNET_SYSERR; } /* build up big hash for signature checking later */ @@ -166,6 +167,7 @@ check_track_transfer_response_ok (struct TALER_EXCHANGE_TrackTransferHandle *wdh &exchange_pub)) { GNUNET_break_op (0); + GNUNET_JSON_parse_free (spec); return GNUNET_SYSERR; } if (GNUNET_OK != @@ -173,6 +175,7 @@ check_track_transfer_response_ok (struct TALER_EXCHANGE_TrackTransferHandle *wdh &exchange_pub)) { GNUNET_break_op (0); + GNUNET_JSON_parse_free (spec); return GNUNET_SYSERR; } wdh->cb (wdh->cb_cls, @@ -184,6 +187,7 @@ check_track_transfer_response_ok (struct TALER_EXCHANGE_TrackTransferHandle *wdh num_details, details); } + GNUNET_JSON_parse_free (spec); TALER_EXCHANGE_track_transfer_cancel (wdh); return GNUNET_OK; } diff --git a/src/exchange-lib/test_exchange_api.c b/src/exchange-lib/test_exchange_api.c index acd087039..337fd297b 100644 --- a/src/exchange-lib/test_exchange_api.c +++ b/src/exchange-lib/test_exchange_api.c @@ -1915,6 +1915,7 @@ interpreter_run (void *cls) } TALER_JSON_hash (contract, &h_contract); + json_decref (contract); wire = json_loads (cmd->details.deposit.wire_details, JSON_REJECT_DUPLICATES, NULL); diff --git a/src/exchange-tools/taler-exchange-keyup.c b/src/exchange-tools/taler-exchange-keyup.c index 4f8a604ea..69d28361f 100644 --- a/src/exchange-tools/taler-exchange-keyup.c +++ b/src/exchange-tools/taler-exchange-keyup.c @@ -523,6 +523,7 @@ exchange_keys_update_signkeys () { fprintf (stderr, "Failed to create signing key directory\n"); + GNUNET_free (signkey_dir); return GNUNET_SYSERR; } @@ -530,6 +531,7 @@ exchange_keys_update_signkeys () signkey_duration, GNUNET_TIME_UNIT_ZERO /* no overlap for signing keys */, &anchor); + GNUNET_free (signkey_dir); while (anchor.abs_value_us < lookahead_sign_stamp.abs_value_us) { diff --git a/src/exchange/taler-exchange-aggregator.c b/src/exchange/taler-exchange-aggregator.c index 08ea8abe9..e3262962c 100644 --- a/src/exchange/taler-exchange-aggregator.c +++ b/src/exchange/taler-exchange-aggregator.c @@ -757,6 +757,7 @@ run_aggregation (void *cls) "Preparing wire transfer of %s to %s\n", amount_s, TALER_B2S (&au->merchant_pub)); + GNUNET_free (amount_s); } au->wp = wp; au->ph = wp->wire_plugin->prepare_wire_transfer (wp->wire_plugin->cls, @@ -1095,7 +1096,11 @@ main (int argc, gettext_noop ("background process that aggregates and executes wire transfers to merchants"), options, &run, NULL)) + { + GNUNET_free ((void*) argv); return 1; + } + GNUNET_free ((void*) argv); return global_ret; } diff --git a/src/util/util.c b/src/util/util.c index 9defa85ff..1f7931a43 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -84,7 +84,11 @@ TALER_config_get_denom (const struct GNUNET_CONFIGURATION_Handle *cfg, return GNUNET_NO; if (GNUNET_OK != TALER_string_to_amount (str, denom)) + { + GNUNET_free (str); return GNUNET_SYSERR; + } + GNUNET_free (str); return GNUNET_OK; }