-misc bugfixes

This commit is contained in:
Christian Grothoff 2021-11-19 11:47:52 +01:00
parent bdaaa0f6cb
commit 68a4d90134
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
11 changed files with 59 additions and 37 deletions

View File

@ -179,9 +179,7 @@ credit_history_cb (void *cls,
if (MHD_HTTP_OK != http_status) if (MHD_HTTP_OK != http_status)
{ {
if ( (MHD_HTTP_NO_CONTENT != http_status) || if ( (MHD_HTTP_NO_CONTENT != http_status) ||
(TALER_EC_NONE != ec) || (TALER_EC_NONE != ec) )
( (MHD_HTTP_NO_CONTENT != http_status) &&
(NULL == details) ) )
{ {
if (0 == http_status) if (0 == http_status)
{ {
@ -294,9 +292,7 @@ debit_history_cb (void *cls,
if (MHD_HTTP_OK != http_status) if (MHD_HTTP_OK != http_status)
{ {
if ( (MHD_HTTP_NO_CONTENT != http_status) || if ( (MHD_HTTP_NO_CONTENT != http_status) ||
(TALER_EC_NONE != ec) || (TALER_EC_NONE != ec) )
( (MHD_HTTP_NO_CONTENT != http_status) &&
(NULL == details) ) )
{ {
if (0 == http_status) if (0 == http_status)
{ {

View File

@ -135,13 +135,11 @@ make_amount (unsigned int val,
unsigned int frac, unsigned int frac,
struct TALER_Amount *out) struct TALER_Amount *out)
{ {
memset (out, GNUNET_assert (GNUNET_OK ==
0, TALER_amount_set_zero (currency,
sizeof (struct TALER_Amount)); out));
out->value = val; out->value = val;
out->fraction = frac; out->fraction = frac;
strcpy (out->currency,
currency);
} }

View File

@ -647,12 +647,12 @@ handle_post_management (struct TEH_RequestContext *rc,
* Handle a get "/management" request. * Handle a get "/management" request.
* *
* @param rc request context * @param rc request context
* @param args array of additional options (must be empty for this function) * @param args array of additional options (must be [0] == "keys")
* @return MHD result code * @return MHD result code
*/ */
static MHD_RESULT static MHD_RESULT
handle_get_management (struct TEH_RequestContext *rc, handle_get_management (struct TEH_RequestContext *rc,
const char *const args[1]) const char *const args[2])
{ {
if ( (NULL != args[0]) && if ( (NULL != args[0]) &&
(0 == strcmp (args[0], (0 == strcmp (args[0],

View File

@ -558,9 +558,14 @@ seed_forgettable (json_t *f)
GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE, GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
&sh, &sh,
sizeof (sh)); sizeof (sh));
json_object_set_new (f, if (0 !=
key, json_object_set_new (f,
GNUNET_JSON_from_data_auto (&sh)); key,
GNUNET_JSON_from_data_auto (&sh)))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
continue; continue;
} }
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, GNUNET_log (GNUNET_ERROR_TYPE_ERROR,

View File

@ -441,10 +441,6 @@ TALER_EXCHANGE_wire (struct TALER_EXCHANGE_Handle *exchange,
return NULL; return NULL;
} }
eh = TALER_EXCHANGE_curl_easy_get_ (wh->url); eh = TALER_EXCHANGE_curl_easy_get_ (wh->url);
GNUNET_break (CURLE_OK ==
curl_easy_setopt (eh,
CURLOPT_TIMEOUT,
get_wire_timeout_seconds (wh->exchange)));
if (NULL == eh) if (NULL == eh)
{ {
GNUNET_break (0); GNUNET_break (0);
@ -452,6 +448,10 @@ TALER_EXCHANGE_wire (struct TALER_EXCHANGE_Handle *exchange,
GNUNET_free (wh); GNUNET_free (wh);
return NULL; return NULL;
} }
GNUNET_break (CURLE_OK ==
curl_easy_setopt (eh,
CURLOPT_TIMEOUT,
get_wire_timeout_seconds (wh->exchange)));
ctx = TEAH_handle_to_context (exchange); ctx = TEAH_handle_to_context (exchange);
wh->job = GNUNET_CURL_job_add_with_ct_json (ctx, wh->job = GNUNET_CURL_job_add_with_ct_json (ctx,
eh, eh,

View File

@ -613,16 +613,20 @@ TALER_TESTING_cmd_deposit (const char *label,
ds->wallet_timestamp = GNUNET_TIME_absolute_get (); ds->wallet_timestamp = GNUNET_TIME_absolute_get ();
(void) GNUNET_TIME_round_abs (&ds->wallet_timestamp); (void) GNUNET_TIME_round_abs (&ds->wallet_timestamp);
json_object_set_new (ds->contract_terms, GNUNET_assert (0 ==
"timestamp", json_object_set_new (ds->contract_terms,
GNUNET_JSON_from_time_abs (ds->wallet_timestamp)); "timestamp",
GNUNET_JSON_from_time_abs (
ds->wallet_timestamp)));
if (0 != refund_deadline.rel_value_us) if (0 != refund_deadline.rel_value_us)
{ {
ds->refund_deadline = GNUNET_TIME_relative_to_absolute (refund_deadline); ds->refund_deadline = GNUNET_TIME_relative_to_absolute (refund_deadline);
(void) GNUNET_TIME_round_abs (&ds->refund_deadline); (void) GNUNET_TIME_round_abs (&ds->refund_deadline);
json_object_set_new (ds->contract_terms, GNUNET_assert (0 ==
"refund_deadline", json_object_set_new (ds->contract_terms,
GNUNET_JSON_from_time_abs (ds->refund_deadline)); "refund_deadline",
GNUNET_JSON_from_time_abs (
ds->refund_deadline)));
} }
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
TALER_string_to_amount (amount, TALER_string_to_amount (amount,

View File

@ -389,9 +389,10 @@ maint_child_death (void *cls)
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Got the dead child process handle, waiting for termination ...\n"); "Got the dead child process handle, waiting for termination ...\n");
GNUNET_OS_process_wait_status (*processp, GNUNET_assert (GNUNET_OK ==
&type, GNUNET_OS_process_wait_status (*processp,
&code); &type,
&code));
GNUNET_OS_process_destroy (*processp); GNUNET_OS_process_destroy (*processp);
*processp = NULL; *processp = NULL;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,

View File

@ -337,6 +337,8 @@ TALER_CRYPTO_helper_esign_sign_ (
struct TALER_ExchangePublicKeyP *exchange_pub, struct TALER_ExchangePublicKeyP *exchange_pub,
struct TALER_ExchangeSignatureP *exchange_sig) struct TALER_ExchangeSignatureP *exchange_sig)
{ {
uint32_t purpose_size = ntohl (purpose->size);
if (GNUNET_OK != if (GNUNET_OK !=
try_connect (esh)) try_connect (esh))
{ {
@ -344,8 +346,9 @@ TALER_CRYPTO_helper_esign_sign_ (
"Failed to connect to helper\n"); "Failed to connect to helper\n");
return TALER_EC_EXCHANGE_SIGNKEY_HELPER_UNAVAILABLE; return TALER_EC_EXCHANGE_SIGNKEY_HELPER_UNAVAILABLE;
} }
GNUNET_assert (purpose_size <
UINT16_MAX - sizeof (struct TALER_CRYPTO_EddsaSignRequest));
{ {
uint32_t purpose_size = ntohl (purpose->size);
char buf[sizeof (struct TALER_CRYPTO_EddsaSignRequest) + purpose_size char buf[sizeof (struct TALER_CRYPTO_EddsaSignRequest) + purpose_size
- sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose)]; - sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose)];
struct TALER_CRYPTO_EddsaSignRequest *sr struct TALER_CRYPTO_EddsaSignRequest *sr
@ -414,6 +417,7 @@ more:
if (off < sizeof (struct GNUNET_MessageHeader)) if (off < sizeof (struct GNUNET_MessageHeader))
continue; continue;
msize = ntohs (hdr->size); msize = ntohs (hdr->size);
GNUNET_assert (msize <= sizeof (buf));
if (off < msize) if (off < msize)
continue; continue;
switch (ntohs (hdr->type)) switch (ntohs (hdr->type))

View File

@ -173,22 +173,28 @@ handle_mt_avail (struct TALER_CRYPTO_RsaDenominationHelper *dh,
= (const struct TALER_CRYPTO_RsaKeyAvailableNotification *) hdr; = (const struct TALER_CRYPTO_RsaKeyAvailableNotification *) hdr;
const char *buf = (const char *) &kan[1]; const char *buf = (const char *) &kan[1];
const char *section_name; const char *section_name;
uint16_t ps;
uint16_t snl;
if (sizeof (*kan) > ntohs (hdr->size)) if (sizeof (*kan) > ntohs (hdr->size))
{ {
GNUNET_break_op (0); GNUNET_break_op (0);
return GNUNET_SYSERR; return GNUNET_SYSERR;
} }
if (ntohs (hdr->size) != ps = ntohs (kan->pub_size);
sizeof (*kan) snl = ntohs (kan->section_name_len);
+ ntohs (kan->pub_size) if (ntohs (hdr->size) != sizeof (*kan) + ps + snl)
+ ntohs (kan->section_name_len))
{ {
GNUNET_break_op (0); GNUNET_break_op (0);
return GNUNET_SYSERR; return GNUNET_SYSERR;
} }
section_name = &buf[ntohs (kan->pub_size)]; if (0 == snl)
if ('\0' != section_name[ntohs (kan->section_name_len) - 1]) {
GNUNET_break_op (0);
return GNUNET_SYSERR;
}
section_name = &buf[ps];
if ('\0' != section_name[snl - 1])
{ {
GNUNET_break_op (0); GNUNET_break_op (0);
return GNUNET_SYSERR; return GNUNET_SYSERR;

View File

@ -266,6 +266,12 @@ TES_read_work (void *cls,
continue; continue;
hdr = (const struct GNUNET_MessageHeader *) buf; hdr = (const struct GNUNET_MessageHeader *) buf;
msize = ntohs (hdr->size); msize = ntohs (hdr->size);
if (msize < sizeof (struct GNUNET_MessageHeader))
{
GNUNET_break_op (0);
return GNUNET_SYSERR;
}
GNUNET_assert (msize <= sizeof (client->iobuf));
} while (off < msize); } while (off < msize);
if (off > msize) if (off > msize)

View File

@ -1116,6 +1116,7 @@ import_key (void *cls,
GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING,
"open", "open",
filename); filename);
GNUNET_break (0 == close (fd));
return GNUNET_OK; return GNUNET_OK;
} }
if (0 != fstat (fd, if (0 != fstat (fd,
@ -1131,6 +1132,7 @@ import_key (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"File `%s' is not a regular file, which is not allowed for private keys!\n", "File `%s' is not a regular file, which is not allowed for private keys!\n",
filename); filename);
GNUNET_break (0 == close (fd));
return GNUNET_OK; return GNUNET_OK;
} }
if (0 != (sbuf.st_mode & (S_IWUSR | S_IRWXG | S_IRWXO))) if (0 != (sbuf.st_mode & (S_IWUSR | S_IRWXG | S_IRWXO)))
@ -1286,7 +1288,7 @@ load_denominations (void *cls,
{ {
struct LoadContext *ctx = cls; struct LoadContext *ctx = cls;
struct Denomination *denom; struct Denomination *denom;
bool wake; bool wake = true;
if ( (0 != strncasecmp (denomination_alias, if ( (0 != strncasecmp (denomination_alias,
"coin_", "coin_",