exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

commit 04161bb24b693765e053f8189aef9ef7b2b140d8
parent f27484a6c21a9e02278cf8560aae56b51c0da668
Author: Christian Grothoff <christian@grothoff.org>
Date:   Wed, 21 Feb 2024 23:10:53 +0100

allow port in x-taler-bank

Diffstat:
Msrc/util/payto.c | 45++++++++++++++++++++++++++++++++++-----------
1 file changed, 34 insertions(+), 11 deletions(-)

diff --git a/src/util/payto.c b/src/util/payto.c @@ -202,6 +202,7 @@ validate_payto_xtalerbank (const char *account_url) const char *user; const char *host; bool dot_ok; + bool post_colon; #define XTALERBANK_PREFIX "payto://x-taler-bank/" if (0 != strncasecmp (account_url, @@ -224,31 +225,53 @@ validate_payto_xtalerbank (const char *account_url) if (NULL != strchr (user + 1, '/')) return GNUNET_strdup ("invalid character '/' after account name"); dot_ok = false; + post_colon = false; while (host != user) { char c = host[0]; - if ('.' == c) + if (':' == c) { - if (! dot_ok) - return GNUNET_strdup ("invalid domain name (misplaced '.')"); - dot_ok = false; + post_colon = true; + host++; + continue; } - else + if (post_colon) { - if (! ( ('-' == c) || - ( ('0' <= c) && ('9' >= c) ) || - ( ('a' <= c) && ('z' >= c) ) || - ( ('A' <= c) && ('Z' >= c) ) ) ) + if (! ( ('0' <= c) && ('9' >= c) ) ) { char *err; GNUNET_asprintf (&err, - "invalid character '%c' in domain name", + "invalid character '%c' in port", c); return err; } - dot_ok = true; + } + else + { + if ('.' == c) + { + if (! dot_ok) + return GNUNET_strdup ("invalid domain name (misplaced '.')"); + dot_ok = false; + } + else + { + if (! ( ('-' == c) || + ( ('0' <= c) && ('9' >= c) ) || + ( ('a' <= c) && ('z' >= c) ) || + ( ('A' <= c) && ('Z' >= c) ) ) ) + { + char *err; + + GNUNET_asprintf (&err, + "invalid character '%c' in domain name", + c); + return err; + } + dot_ok = true; + } } host++; }