From b26041bfa0a1e58930a5bf26b720f97f8cf6ae13 Mon Sep 17 00:00:00 2001 From: Christian Göttsche Date: Sun, 22 Feb 2026 22:09:08 +0100 Subject: Use correct parser for session ID lengths Can causes issues on uncommon architectures, like s390x. --- src/sp_config.c | 15 +++++++++++++++ src/sp_config.h | 1 + src/sp_config_keywords.c | 4 ++-- 3 files changed, 18 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/sp_config.c b/src/sp_config.c index ed41a6a..46742c4 100644 --- a/src/sp_config.c +++ b/src/sp_config.c @@ -213,6 +213,21 @@ SP_PARSEKW_FN(parse_uint) { return ret; } +SP_PARSEKW_FN(parse_ulong) { + int ret = SP_PARSER_SUCCESS; + SP_PARSE_ARG(value); + + char *endptr; + errno = 0; + *(u_long*)retval = (u_long)strtoul(ZSTR_VAL(value), &endptr, 10); + if (errno != 0 || !endptr || endptr == ZSTR_VAL(value)) { + sp_log_err("config", "Failed to parse arg '%s' of `%s` on line %zu", ZSTR_VAL(value), token, kw->lineno); + ret = SP_PARSER_ERROR; + } + zend_string_release(value); + return ret; +} + SP_PARSEKW_FN(parse_cidr) { CHECK_DUPLICATE_KEYWORD(retval); SP_PARSE_ARG(value); diff --git a/src/sp_config.h b/src/sp_config.h index 8886bc6..edaa686 100644 --- a/src/sp_config.h +++ b/src/sp_config.h @@ -302,6 +302,7 @@ SP_PARSEKW_FN(parse_regexp); SP_PARSEKW_FN(parse_empty); SP_PARSEKW_FN(parse_int); SP_PARSEKW_FN(parse_uint); +SP_PARSEKW_FN(parse_ulong); SP_PARSEKW_FN(parse_php_type); SP_PARSEKW_FN(parse_cidr); SP_PARSEKW_FN(parse_list); diff --git a/src/sp_config_keywords.c b/src/sp_config_keywords.c index 7f41e38..1a23658 100644 --- a/src/sp_config_keywords.c +++ b/src/sp_config_keywords.c @@ -33,8 +33,8 @@ SP_PARSE_FN(parse_session) { {parse_empty, SP_TOKEN_ENCRYPT, &(cfg->encrypt)}, {parse_empty, SP_TOKEN_SIMULATION, &(cfg->simulation)}, {parse_empty, SP_TOKEN_SIM, &(cfg->simulation)}, - {parse_uint, SP_TOKEN_SID_MIN_LENGTH, &(cfg->sid_min_length)}, - {parse_uint, SP_TOKEN_SID_MAX_LENGTH, &(cfg->sid_max_length)}, + {parse_ulong, SP_TOKEN_SID_MIN_LENGTH, &(cfg->sid_min_length)}, + {parse_ulong, SP_TOKEN_SID_MAX_LENGTH, &(cfg->sid_max_length)}, {0, 0, 0}}; SP_PROCESS_CONFIG_KEYWORDS_ERR(); -- cgit v1.3