diff -Naur a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c --- a/sapi/fpm/fpm/fpm_main.c 2024-08-21 12:54:09.155267224 +0200 +++ b/sapi/fpm/fpm/fpm_main.c 2024-08-21 12:54:41.041029746 +0200 @@ -1401,7 +1401,6 @@ int *mode = (int *)arg; char *key; char *value = NULL; - struct key_value_s kv; if (!mode || !arg1) return; @@ -1412,7 +1411,7 @@ key = Z_STRVAL_P(arg1); - if (!key || strlen(key) < 1) { + if (!key || Z_STRLEN_P(arg1) < 1) { zlog(ZLOG_ERROR, "Passing INI directive through FastCGI: empty key"); return; } @@ -1426,10 +1425,8 @@ return; } - kv.key = key; - kv.value = value; - kv.next = NULL; - if (fpm_php_apply_defines_ex(&kv, *mode) == -1) { + // zend_string of arg2 is marked persistent but releasing doesn't know. so pass the internal char* + if (zend_alter_ini_entry_chars(Z_STR_P(arg1), value, Z_STRLEN_P(arg2), *mode, PHP_INI_STAGE_HTACCESS) == FAILURE) { zlog(ZLOG_ERROR, "Passing INI directive through FastCGI: unable to set '%s'", key); } }