diff --git a/ext/standard/array.c b/ext/standard/array.c index 4896ac44a727d..37c80e0989caa 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -5762,6 +5762,7 @@ PHP_FUNCTION(array_diff) for (i = 1; i < argc; i++) { if (Z_TYPE(args[i]) != IS_ARRAY) { + zend_tmp_string_release(tmp_search_str); zend_argument_type_error(i + 1, "must be of type array, %s given", zend_zval_value_name(&args[i])); RETURN_THROWS(); } diff --git a/ext/standard/tests/array/array_diff_leak_custom_type_checks.phpt b/ext/standard/tests/array/array_diff_leak_custom_type_checks.phpt new file mode 100644 index 0000000000000..77aef0ccc08b2 --- /dev/null +++ b/ext/standard/tests/array/array_diff_leak_custom_type_checks.phpt @@ -0,0 +1,14 @@ +--TEST-- +array_diff() memory leak with custom type checks +--FILE-- +getMessage(), "\n"; +} + +?> +--EXPECT-- +array_diff(): Argument #2 must be of type array, string given