Skip to content

Commit e2ec59f

Browse files
committed
Merge branch 'PHP-8.2'
* PHP-8.2: Fix GH-10611: fpm_env_init_main leaks environ
2 parents 5c058d7 + 6a44705 commit e2ec59f

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

sapi/fpm/fpm/fpm_env.c

+25
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include "fpm_env.h"
1313
#include "fpm.h"
14+
#include "fpm_cleanup.h"
1415

1516
#ifndef HAVE_SETPROCTITLE
1617
#if defined(__linux__) || defined(__APPLE__)
@@ -194,6 +195,26 @@ static int fpm_env_conf_wp(struct fpm_worker_pool_s *wp) /* {{{ */
194195
}
195196
/* }}} */
196197

198+
199+
#ifndef HAVE_SETPROCTITLE
200+
#if defined(__linux__) || defined(__APPLE__)
201+
/* Frees our copied environment variables. */
202+
static void fpm_env_cleanup(int which, void *arg) /* {{{ */
203+
{
204+
char** allocated_environ = environ;
205+
if (allocated_environ) {
206+
environ = NULL;
207+
unsigned int i = 0;
208+
while (allocated_environ[i]) {
209+
free(allocated_environ[i]);
210+
i++;
211+
}
212+
free(allocated_environ);
213+
}
214+
}
215+
#endif
216+
#endif
217+
197218
int fpm_env_init_main(void)
198219
{
199220
struct fpm_worker_pool_s *wp;
@@ -254,6 +275,10 @@ int fpm_env_init_main(void)
254275
env_nb++;
255276
}
256277

278+
if (0 > fpm_cleanup_add(FPM_CLEANUP_PARENT_EXIT_MAIN, fpm_env_cleanup, 0)) {
279+
return -1;
280+
}
281+
257282
if ((new_environ = malloc((1U + env_nb) * sizeof (char *))) == NULL) {
258283
return -1;
259284
}

0 commit comments

Comments
 (0)