diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index cc5b587c04c8..12a06fadf1ae 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -774,6 +774,9 @@ PHP_FUNCTION(putenv) zend_argument_value_error(1, "must have a valid syntax"); RETURN_THROWS(); } + if (UNEXPECTED(EG(flags) & EG_FLAGS_IN_RESOURCE_SHUTDOWN)) { + RETURN_FALSE; + } pe.putenv_string = zend_strndup(setting, setting_len); if ((p = strchr(setting, '='))) { diff --git a/ext/standard/tests/streams/gh20656.phpt b/ext/standard/tests/streams/gh20656.phpt new file mode 100644 index 000000000000..764d8a4406b6 --- /dev/null +++ b/ext/standard/tests/streams/gh20656.phpt @@ -0,0 +1,17 @@ +--TEST-- +GH-20656 (HashTable use-after-destroy in function table via stream wrapper magic __call() with nested redeclaration) +--FILE-- + +--EXPECT--