Author: brane Date: Thu Jun 26 19:25:38 2025 New Revision: 1926742 URL: http://svn.apache.org/viewvc?rev=1926742&view=rev Log: On the user-defined-authn branch: Minor tweaks and optimisations.
* src/syntax.c (ct_isspace, ct_istoken, ct_istoken68, ct_tolower): Force index to 8 bits. (serf__parse_authn_parameters): Don't look twice for the ',' separator. Modified: serf/branches/user-defined-authn/src/syntax.c Modified: serf/branches/user-defined-authn/src/syntax.c URL: http://svn.apache.org/viewvc/serf/branches/user-defined-authn/src/syntax.c?rev=1926742&r1=1926741&r2=1926742&view=diff ============================================================================== --- serf/branches/user-defined-authn/src/syntax.c (original) +++ serf/branches/user-defined-authn/src/syntax.c Thu Jun 26 19:25:38 2025 @@ -320,19 +320,19 @@ static const apr_uint32_t char_table[256 /* Character class lookup */ static APR_INLINE int ct_isspace(char c) { - return char_table[(unsigned char)c] & CT_WHITESPACE; + return char_table[0xff & (unsigned char)c] & CT_WHITESPACE; } static APR_INLINE int ct_istoken(char c) { static const apr_uint32_t ct = CT_TOKEN | CT_DIGIT | CT_UPPER | CT_LOWER; - return ct & char_table[(unsigned char)c]; + return ct & char_table[0xff & (unsigned char)c]; } static APR_INLINE int ct_istoken68(char c) { static const apr_uint32_t ct = CT_TOKEN68 | CT_DIGIT | CT_UPPER | CT_LOWER; - return ct & char_table[(unsigned char)c]; + return ct & char_table[0xff & (unsigned char)c]; } @@ -362,7 +362,7 @@ static const unsigned char casefold_tabl /* Fold ASCII to lowercase. */ static APR_INLINE char ct_tolower(char c) { - return (char) casefold_table[(unsigned char)c]; + return (char) casefold_table[0xff & (unsigned char)c]; } @@ -453,13 +453,13 @@ apr_hash_t *serf__parse_authn_parameters apr_hash_t *dict = apr_hash_make(pool); char *dst = apr_palloc(pool, strlen(attrs) + 1); const char *src = skip_space(attrs); - const char *end = skip_token68(src); - bool want_comma = false; + const char *const end = skip_token68(src); /* Check if the parameters are a single token68. */ if (end != src && !*skip_space(end)) { - memcpy(dst, src, end - src); - dst[end - src] = '\0'; + const apr_size_t len = end - src; + memcpy(dst, src, len); + dst[len] = '\0'; apr_hash_set(dict, "", 0, dst); return dict; } @@ -470,19 +470,7 @@ apr_hash_t *serf__parse_authn_parameters apr_ssize_t keylen; const char *value; - /* Skip spaces and the separator. */ - src = skip_space(src); - if (want_comma) { - if (*src != ',') - break; - ++src; - if (*src) - src = skip_space(src); - } - if (!*src) - break; - - /* Pars the key, a lower-cased token. */ + /* Parse the key, a lower-cased token. */ key = dst; src = copy_token_key(&dst, src); if (!src || key == dst || *src != '=') @@ -503,12 +491,15 @@ apr_hash_t *serf__parse_authn_parameters /* Must be at the end of the string or at a valid separator. */ src = skip_space(src); - if (*src && *src != ',') - break; + if (*src) { + if (*src != ',') + break; + /* Skip the separator and any spaces after the separator. */ + src = skip_space(src + 1); + } /* Put the new key/value pair into the dict. */ apr_hash_set(dict, key, keylen, value); - want_comma = true; } return dict; @@ -526,8 +517,8 @@ void serf__tolower_inplace(char *dst) const char *serf__tolower(const char *src, apr_pool_t *pool) { - const size_t len = strlen(src) + 1; - size_t i; + const apr_size_t len = strlen(src) + 1; + apr_size_t i; char *dst = apr_palloc(pool, len); for (i = 0; i < len; ++i)