commit 7bd219d33ff963db6b3aafb8ca055a9a503aac30
parent 0a2359b9a4a772f7025e3c034515c2a4570f7704
Author: Christian Grothoff <grothoff@gnunet.org>
Date: Thu, 1 May 2025 12:02:11 +0200
handle default case as well in phase_generate_reply_error
Diffstat:
1 file changed, 36 insertions(+), 62 deletions(-)
diff --git a/src/exchange/taler-exchange-httpd_withdraw.c b/src/exchange/taler-exchange-httpd_withdraw.c
@@ -1307,15 +1307,7 @@ phase_generate_reply_error (
switch (wc->error.code)
{
case WITHDRAW_ERROR_NONE:
- GNUNET_break (0);
- finish_loop (wc,
- TALER_MHD_reply_with_error (
- wc->rc->connection,
- MHD_HTTP_INTERNAL_SERVER_ERROR,
- TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
- "error phase without error"));
break;
-
case WITHDRAW_ERROR_REQUEST_PARAMETER_MALFORMED:
finish_loop (wc,
TALER_MHD_reply_with_error (
@@ -1323,8 +1315,7 @@ phase_generate_reply_error (
MHD_HTTP_BAD_REQUEST,
TALER_EC_GENERIC_PARAMETER_MALFORMED,
wc->error.details.request_parameter_malformed));
- break;
-
+ return;
case WITHDRAW_ERROR_KEYS_MISSING:
finish_loop (wc,
TALER_MHD_reply_with_error (
@@ -1332,8 +1323,7 @@ phase_generate_reply_error (
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_EXCHANGE_GENERIC_KEYS_MISSING,
NULL));
- break;
-
+ return;
case WITHDRAW_ERROR_DB_FETCH_FAILED:
finish_loop (wc,
TALER_MHD_reply_with_error (
@@ -1341,8 +1331,7 @@ phase_generate_reply_error (
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_GENERIC_DB_FETCH_FAILED,
wc->error.details.db_fetch_context));
- break;
-
+ return;
case WITHDRAW_ERROR_DB_INVARIANT_FAILURE:
finish_loop (wc,
TALER_MHD_reply_with_error (
@@ -1350,24 +1339,21 @@ phase_generate_reply_error (
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_GENERIC_DB_INVARIANT_FAILURE,
NULL));
- break;
-
+ return;
case WITHDRAW_ERROR_RESERVE_UNKNOWN:
finish_loop (wc,
TALER_MHD_reply_with_ec (
wc->rc->connection,
TALER_EC_EXCHANGE_GENERIC_RESERVE_UNKNOWN,
NULL));
- break;
-
+ return;
case WITHDRAW_ERROR_DENOMINATION_SIGN:
finish_loop (wc,
TALER_MHD_reply_with_ec (
wc->rc->connection,
wc->error.details.ec_denomination_sign,
NULL));
- break;
-
+ return;
case WITHDRAW_ERROR_KYC_REQUIRED:
finish_loop (wc,
TEH_RESPONSE_reply_kyc_required (
@@ -1375,16 +1361,14 @@ phase_generate_reply_error (
&wc->h_normalized_payto,
&wc->kyc,
false));
- break;
-
+ return;
case WITHDRAW_ERROR_DENOMINATION_KEY_UNKNOWN:
GNUNET_break_op (0);
finish_loop (wc,
TEH_RESPONSE_reply_unknown_denom_pub_hash (
wc->rc->connection,
wc->error.details.denom_h));
- break;
-
+ return;
case WITHDRAW_ERROR_DENOMINATION_EXPIRED:
GNUNET_break_op (0);
finish_loop (wc,
@@ -1393,8 +1377,7 @@ phase_generate_reply_error (
wc->error.details.denom_h,
TALER_EC_EXCHANGE_GENERIC_DENOMINATION_EXPIRED,
"WITHDRAW"));
- break;
-
+ return;
case WITHDRAW_ERROR_DENOMINATION_VALIDITY_IN_FUTURE:
finish_loop (wc,
TEH_RESPONSE_reply_expired_denom_pub_hash (
@@ -1402,8 +1385,7 @@ phase_generate_reply_error (
wc->error.details.denom_h,
TALER_EC_EXCHANGE_GENERIC_DENOMINATION_VALIDITY_IN_FUTURE,
"WITHDRAW"));
- break;
-
+ return;
case WITHDRAW_ERROR_DENOMINATION_REVOKED:
GNUNET_break_op (0);
finish_loop (wc,
@@ -1411,43 +1393,39 @@ phase_generate_reply_error (
wc->rc->connection,
TALER_EC_EXCHANGE_GENERIC_DENOMINATION_REVOKED,
NULL));
- break;
-
+ return;
case WITHDRAW_ERROR_CIPHER_MISMATCH:
finish_loop (wc,
TALER_MHD_reply_with_ec (
wc->rc->connection,
TALER_EC_EXCHANGE_GENERIC_CIPHER_MISMATCH,
NULL));
- break;
-
+ return;
case WITHDRAW_ERROR_BLINDING_SEED_REQUIRED:
finish_loop (wc,
TALER_MHD_reply_with_ec (
wc->rc->connection,
TALER_EC_GENERIC_PARAMETER_MISSING,
"blinding_seed"));
- break;
-
+ return;
case WITHDRAW_ERROR_CRYPTO_HELPER:
finish_loop (wc,
TALER_MHD_reply_with_ec (
wc->rc->connection,
TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
NULL));
- break;
-
+ return;
case WITHDRAW_ERROR_RESERVE_CIPHER_UNKNOWN:
finish_loop (wc,
TALER_MHD_reply_with_ec (
wc->rc->connection,
TALER_EC_EXCHANGE_GENERIC_CIPHER_MISMATCH,
"cipher"));
- break;
-
+ return;
case WITHDRAW_ERROR_AGE_RESTRICTION_NOT_SUPPORTED_BY_DENOMINATION:
{
char msg[256];
+
GNUNET_snprintf (msg,
sizeof(msg),
"denomination %s does not support age restriction",
@@ -1457,9 +1435,8 @@ phase_generate_reply_error (
wc->rc->connection,
TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN,
msg));
- break;
+ return;
}
-
case WITHDRAW_ERROR_MAXIMUM_AGE_TOO_LARGE:
finish_loop (wc,
TALER_MHD_REPLY_JSON_PACK (
@@ -1473,15 +1450,13 @@ phase_generate_reply_error (
GNUNET_JSON_pack_uint64 (
"reserve_birthday",
wc->error.details.maximum_age_too_large.birthday)));
- break;
-
+ return;
case WITHDRAW_ERROR_AGE_RESTRICTION_REQUIRED:
finish_loop (wc,
TEH_RESPONSE_reply_reserve_age_restriction_required (
wc->rc->connection,
wc->error.details.age_restriction_required));
- break;
-
+ return;
case WITHDRAW_ERROR_AMOUNT_OVERFLOW:
finish_loop (wc,
TALER_MHD_reply_with_error (
@@ -1489,8 +1464,7 @@ phase_generate_reply_error (
MHD_HTTP_BAD_REQUEST,
TALER_EC_EXCHANGE_WITHDRAW_AMOUNT_OVERFLOW,
"amount"));
- break;
-
+ return;
case WITHDRAW_ERROR_FEE_OVERFLOW:
finish_loop (wc,
TALER_MHD_reply_with_error (
@@ -1498,8 +1472,7 @@ phase_generate_reply_error (
MHD_HTTP_BAD_REQUEST,
TALER_EC_EXCHANGE_WITHDRAW_AMOUNT_OVERFLOW,
"fee"));
- break;
-
+ return;
case WITHDRAW_ERROR_AMOUNT_PLUS_FEE_OVERFLOW:
finish_loop (wc,
TALER_MHD_reply_with_error (
@@ -1507,16 +1480,14 @@ phase_generate_reply_error (
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_EXCHANGE_WITHDRAW_AMOUNT_FEE_OVERFLOW,
"amount+fee"));
- break;
-
+ return;
case WITHDRAW_ERROR_CONFIRMATION_SIGN:
finish_loop (wc,
TALER_MHD_reply_with_ec (
wc->rc->connection,
wc->error.details.ec_confirmation_sign,
NULL));
- break;
-
+ return;
case WITHDRAW_ERROR_INSUFFICIENT_FUNDS:
finish_loop (wc,
TEH_RESPONSE_reply_reserve_insufficient_balance (
@@ -1525,8 +1496,7 @@ phase_generate_reply_error (
&wc->error.details.insufficient_funds,
&wc->request.withdraw.amount_with_fee,
&wc->request.withdraw.reserve_pub));
- break;
-
+ return;
case WITHDRAW_ERROR_IDEMPOTENT_PLANCHET:
finish_loop (wc,
TALER_MHD_reply_with_error (
@@ -1534,8 +1504,7 @@ phase_generate_reply_error (
MHD_HTTP_CONFLICT,
TALER_EC_EXCHANGE_WITHDRAW_IDEMPOTENT_PLANCHET,
NULL));
- break;
-
+ return;
case WITHDRAW_ERROR_NONCE_RESUSE:
finish_loop (wc,
TALER_MHD_reply_with_error (
@@ -1543,32 +1512,37 @@ phase_generate_reply_error (
MHD_HTTP_CONFLICT,
TALER_EC_EXCHANGE_WITHDRAW_NONCE_REUSE,
"blinding_seed"));
- break;
-
+ return;
case WITHDRAW_ERROR_RESERVE_SIGNATURE_INVALID:
finish_loop (wc,
TALER_MHD_reply_with_ec (
wc->rc->connection,
TALER_EC_EXCHANGE_WITHDRAW_RESERVE_SIGNATURE_INVALID,
NULL));
- break;
-
+ return;
case WITHDRAW_ERROR_LEGITIMIZATION_RESULT: {
finish_loop (
wc,
MHD_queue_response (wc->rc->connection,
wc->error.details.legitimization_result.http_status,
wc->error.details.legitimization_result.response));
- break;
+ return;
}
}
+ GNUNET_break (0);
+ finish_loop (wc,
+ TALER_MHD_reply_with_error (
+ wc->rc->connection,
+ MHD_HTTP_INTERNAL_SERVER_ERROR,
+ TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
+ "error phase without error"));
}
/**
* Initializes the new context for the incoming withdraw request
*
- * @param wc withdraw request context
+ * @param[in,out] wc withdraw request context
* @param root json body of the request
*/
static void