Skip to content

Commit b56699b

Browse files
committed
Use system allocator for putenv value
The putenv value is stored in environ. If for some reason we fail to restore it on shutdown, make sure that we fail gracefully by using a system allocated value, rather than a ZMM allocated one. This is an additional mitigation for bug #81316 style issues if all else fails.
1 parent cf6c354 commit b56699b

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

ext/standard/basic_functions.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ static void php_putenv_destructor(zval *zv) /* {{{ */
185185
}
186186
#endif
187187

188-
efree(pe->putenv_string);
188+
free(pe->putenv_string);
189189
efree(pe->key);
190190
efree(pe);
191191
}
@@ -849,7 +849,7 @@ PHP_FUNCTION(putenv)
849849
RETURN_THROWS();
850850
}
851851

852-
pe.putenv_string = estrndup(setting, setting_len);
852+
pe.putenv_string = zend_strndup(setting, setting_len);
853853
pe.key = estrndup(setting, setting_len);
854854
if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */
855855
*p = '\0';
@@ -905,7 +905,7 @@ PHP_FUNCTION(putenv)
905905
/* valw may be NULL, but the failed conversion still needs to be checked. */
906906
if (!keyw || !valw && value) {
907907
tsrm_env_unlock();
908-
efree(pe.putenv_string);
908+
free(pe.putenv_string);
909909
efree(pe.key);
910910
free(keyw);
911911
free(valw);
@@ -939,7 +939,7 @@ PHP_FUNCTION(putenv)
939939
#endif
940940
RETURN_TRUE;
941941
} else {
942-
efree(pe.putenv_string);
942+
free(pe.putenv_string);
943943
efree(pe.key);
944944
#if defined(PHP_WIN32)
945945
free(keyw);

0 commit comments

Comments
 (0)