merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit b72d44bd6010657d49646ff10ffc3dc6f7740ae6
parent 7247592dd7ce3542a26a72897c9b6e6021f0241a
Author: Christian Grothoff <christian@grothoff.org>
Date:   Fri,  9 Oct 2026 22:43:58 +0200

strtok_r is needed due to nesting, and anyway safer

Diffstat:
Msrc/backend/taler-merchant-httpd_auth.c | 26+++++++++++++++++---------
1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_auth.c b/src/backend/taler-merchant-httpd_auth.c @@ -476,8 +476,10 @@ permission_in_scope (const char *permission_required, } permissions = GNUNET_strdup (perms_tmp); { - const char *perm = strtok (permissions, - ","); + char *sp; + const char *perm = strtok_r (permissions, + ",", + &sp); if (NULL == perm) { @@ -514,14 +516,15 @@ permission_in_scope (const char *permission_required, GNUNET_free (permissions); return true; } - perm = strtok (NULL, - ","); + perm = strtok_r (NULL, + ",", + &sp); } } GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Permission check failed: %s not found in %s\n", permission_required, - permissions); + perms_tmp); GNUNET_free (permissions); return false; } @@ -552,10 +555,14 @@ TMH_scope_is_subset (enum TMH_AuthScope as, return true; permissions = GNUNET_strdup (candidate_perms); { + char *sp; const char *perm; - perm = strtok (permissions, - ","); + /* permission_in_scope() tokenizes as well, so we must not + use the non-reentrant strtok() here. */ + perm = strtok_r (permissions, + ",", + &sp); if (NULL == perm) { GNUNET_free (permissions); @@ -569,8 +576,9 @@ TMH_scope_is_subset (enum TMH_AuthScope as, GNUNET_free (permissions); return false; } - perm = strtok (NULL, - ","); + perm = strtok_r (NULL, + ",", + &sp); } } GNUNET_free (permissions);