From: Nikita Popov Date: Mon, 6 Jul 2020 16:57:41 +0000 (+0200) Subject: Avoid some unnecessary uses of no_separation=0 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0280b83e1179b3901f4c34c777c6232c5a3f99b8;p=php Avoid some unnecessary uses of no_separation=0 For the rare cases where references are part of the API, construct them explicitly. Otherwise do not allow separation. --- diff --git a/Zend/zend_API.h b/Zend/zend_API.h index 578cf629f8..1adfbacb05 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -500,9 +500,9 @@ ZEND_API int add_property_zval_ex(zval *arg, const char *key, size_t key_len, zv ZEND_API int _call_user_function_ex(zval *object, zval *function_name, zval *retval_ptr, uint32_t param_count, zval params[], int no_separation); -#define call_user_function(function_table, object, function_name, retval_ptr, param_count, params) \ +#define call_user_function(_unused, object, function_name, retval_ptr, param_count, params) \ _call_user_function_ex(object, function_name, retval_ptr, param_count, params, 1) -#define call_user_function_ex(function_table, object, function_name, retval_ptr, param_count, params, no_separation, symbol_table) \ +#define call_user_function_ex(_unused, object, function_name, retval_ptr, param_count, params, no_separation, _unused2) \ _call_user_function_ex(object, function_name, retval_ptr, param_count, params, no_separation) ZEND_API extern const zend_fcall_info empty_fcall_info; diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index 0d96dd00d0..d2f0c6cb54 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -3748,7 +3748,7 @@ int _ldap_rebind_proc(LDAP *ldap, const char *url, ber_tag_t req, ber_int_t msgi /* callback */ ZVAL_COPY_VALUE(&cb_args[0], cb_link); ZVAL_STRING(&cb_args[1], url); - if (call_user_function_ex(EG(function_table), NULL, &ld->rebindproc, &cb_retval, 2, cb_args, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) { + if (call_user_function(EG(function_table), NULL, &ld->rebindproc, &cb_retval, 2, cb_args) == SUCCESS && !Z_ISUNDEF(cb_retval)) { retval = zval_get_long(&cb_retval); zval_ptr_dtor(&cb_retval); } else { diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c index 9604feeb14..3e2b72d9db 100644 --- a/ext/openssl/xp_ssl.c +++ b/ext/openssl/xp_ssl.c @@ -1149,7 +1149,7 @@ static void php_openssl_limit_handshake_reneg(const SSL *ssl) /* {{{ */ /* Closing the stream inside this callback would segfault! */ stream->flags |= PHP_STREAM_FLAG_NO_FCLOSE; - if (FAILURE == call_user_function_ex(NULL, NULL, val, &retval, 1, ¶m, 0, NULL)) { + if (FAILURE == call_user_function(NULL, NULL, val, &retval, 1, ¶m)) { php_error(E_WARNING, "SSL: failed invoking reneg limit notification callback"); } stream->flags ^= PHP_STREAM_FLAG_NO_FCLOSE; diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 7875285f56..cc52b429c8 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -859,7 +859,7 @@ static void user_space_stream_notifier(php_stream_context *context, int notifyco ZVAL_LONG(&zvs[4], bytes_sofar); ZVAL_LONG(&zvs[5], bytes_max); - if (FAILURE == call_user_function_ex(NULL, NULL, callback, &retval, 6, zvs, 0, NULL)) { + if (FAILURE == call_user_function(NULL, NULL, callback, &retval, 6, zvs)) { php_error_docref(NULL, E_WARNING, "Failed to call user notifier"); } for (i = 0; i < 6; i++) { diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c index 4d11ae2b44..7b3197b981 100644 --- a/ext/standard/user_filters.c +++ b/ext/standard/user_filters.c @@ -174,15 +174,15 @@ php_stream_filter_status_t userfilter_filter( } else { ZVAL_NULL(&args[2]); } + ZVAL_MAKE_REF(&args[2]); ZVAL_BOOL(&args[3], flags & PSFS_FLAG_FLUSH_CLOSE); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, obj, &func_name, &retval, - 4, args, - 0, NULL); + 4, args); zval_ptr_dtor(&func_name); diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re index 9aadaf5843..8df8480501 100644 --- a/ext/standard/var_unserializer.re +++ b/ext/standard/var_unserializer.re @@ -1097,7 +1097,7 @@ object ":" uiv ":" ["] { ZVAL_STR_COPY(&args[0], class_name); BG(serialize_lock)++; - if (call_user_function_ex(NULL, NULL, &user_func, &retval, 1, args, 0, NULL) != SUCCESS) { + if (call_user_function(NULL, NULL, &user_func, &retval, 1, args) != SUCCESS) { BG(serialize_lock)--; if (EG(exception)) { zend_string_release_ex(class_name, 0); diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index 8151ad13ce..83b600e265 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -2929,7 +2929,7 @@ static void _php_zip_progress_callback(zip_t *arch, double state, void *ptr) ze_zip_object *obj = ptr; ZVAL_DOUBLE(&cb_args[0], state); - if (call_user_function_ex(EG(function_table), NULL, &obj->progress_callback, &cb_retval, 1, cb_args, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) { + if (call_user_function(EG(function_table), NULL, &obj->progress_callback, &cb_retval, 1, cb_args) == SUCCESS && !Z_ISUNDEF(cb_retval)) { zval_ptr_dtor(&cb_retval); } } @@ -2985,7 +2985,7 @@ static int _php_zip_cancel_callback(zip_t *arch, void *ptr) int retval = 0; ze_zip_object *obj = ptr; - if (call_user_function_ex(EG(function_table), NULL, &obj->cancel_callback, &cb_retval, 0, NULL, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) { + if (call_user_function(EG(function_table), NULL, &obj->cancel_callback, &cb_retval, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) { retval = zval_get_long(&cb_retval); zval_ptr_dtor(&cb_retval); } diff --git a/main/streams/userspace.c b/main/streams/userspace.c index ffdd0754e4..6c75c1b2ed 100644 --- a/main/streams/userspace.c +++ b/main/streams/userspace.c @@ -373,12 +373,11 @@ static php_stream *user_wrapper_opener(php_stream_wrapper *wrapper, const char * ZVAL_STRING(&zfuncname, USERSTREAM_OPEN); zend_try { - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, Z_ISUNDEF(us->object)? NULL : &us->object, &zfuncname, &zretval, - 4, args, - 0, NULL ); + 4, args); } zend_catch { FG(user_stream_current_filename) = NULL; zend_bailout(); @@ -452,12 +451,11 @@ static php_stream *user_wrapper_opendir(php_stream_wrapper *wrapper, const char ZVAL_STRING(&zfuncname, USERSTREAM_DIR_OPEN); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, Z_ISUNDEF(us->object)? NULL : &us->object, &zfuncname, &zretval, - 2, args, - 0, NULL ); + 2, args); if (call_result == SUCCESS && Z_TYPE(zretval) != IS_UNDEF && zval_is_true(&zretval)) { /* the stream is now open! */ @@ -601,12 +599,11 @@ static ssize_t php_userstreamop_write(php_stream *stream, const char *buf, size_ ZVAL_STRINGL(&args[0], (char*)buf, count); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, Z_ISUNDEF(us->object)? NULL : &us->object, &func_name, &retval, - 1, args, - 0, NULL); + 1, args); zval_ptr_dtor(&args[0]); zval_ptr_dtor(&func_name); @@ -655,12 +652,11 @@ static ssize_t php_userstreamop_read(php_stream *stream, char *buf, size_t count ZVAL_LONG(&args[0], count); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, Z_ISUNDEF(us->object)? NULL : &us->object, &func_name, &retval, - 1, args, - 0, NULL); + 1, args); zval_ptr_dtor(&args[0]); zval_ptr_dtor(&func_name); @@ -796,12 +792,11 @@ static int php_userstreamop_seek(php_stream *stream, zend_off_t offset, int when ZVAL_LONG(&args[0], offset); ZVAL_LONG(&args[1], whence); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, Z_ISUNDEF(us->object)? NULL : &us->object, &func_name, &retval, - 2, args, - 0, NULL); + 2, args); zval_ptr_dtor(&args[0]); zval_ptr_dtor(&args[1]); @@ -969,11 +964,11 @@ static int php_userstreamop_set_option(php_stream *stream, int option, int value /* TODO wouldblock */ ZVAL_STRINGL(&func_name, USERSTREAM_LOCK, sizeof(USERSTREAM_LOCK)-1); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, Z_ISUNDEF(us->object)? NULL : &us->object, &func_name, &retval, - 1, args, 0, NULL); + 1, args); if (call_result == SUCCESS && (Z_TYPE(retval) == IS_FALSE || Z_TYPE(retval) == IS_TRUE)) { ret = (Z_TYPE(retval) == IS_FALSE); @@ -1010,11 +1005,11 @@ static int php_userstreamop_set_option(php_stream *stream, int option, int value ptrdiff_t new_size = *(ptrdiff_t*) ptrparam; if (new_size >= 0 && new_size <= (ptrdiff_t)LONG_MAX) { ZVAL_LONG(&args[0], (zend_long)new_size); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, Z_ISUNDEF(us->object)? NULL : &us->object, &func_name, &retval, - 1, args, 0, NULL); + 1, args); if (call_result == SUCCESS && Z_TYPE(retval) != IS_UNDEF) { if (Z_TYPE(retval) == IS_FALSE || Z_TYPE(retval) == IS_TRUE) { ret = (Z_TYPE(retval) == IS_TRUE) ? PHP_STREAM_OPTION_RETURN_OK : @@ -1074,11 +1069,11 @@ static int php_userstreamop_set_option(php_stream *stream, int option, int value break; } - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, Z_ISUNDEF(us->object)? NULL : &us->object, &func_name, &retval, - 3, args, 0, NULL); + 3, args); if (call_result == FAILURE) { php_error_docref(NULL, E_WARNING, "%s::" USERSTREAM_SET_OPTION " is not implemented!", @@ -1124,12 +1119,11 @@ static int user_wrapper_unlink(php_stream_wrapper *wrapper, const char *url, int ZVAL_STRING(&zfuncname, USERSTREAM_UNLINK); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, &object, &zfuncname, &zretval, - 1, args, - 0, NULL ); + 1, args); if (call_result == SUCCESS && (Z_TYPE(zretval) == IS_FALSE || Z_TYPE(zretval) == IS_TRUE)) { ret = (Z_TYPE(zretval) == IS_TRUE); @@ -1169,12 +1163,11 @@ static int user_wrapper_rename(php_stream_wrapper *wrapper, const char *url_from ZVAL_STRING(&zfuncname, USERSTREAM_RENAME); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, &object, &zfuncname, &zretval, - 2, args, - 0, NULL ); + 2, args); if (call_result == SUCCESS && (Z_TYPE(zretval) == IS_FALSE || Z_TYPE(zretval) == IS_TRUE)) { ret = (Z_TYPE(zretval) == IS_TRUE); @@ -1216,12 +1209,11 @@ static int user_wrapper_mkdir(php_stream_wrapper *wrapper, const char *url, int ZVAL_STRING(&zfuncname, USERSTREAM_MKDIR); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, &object, &zfuncname, &zretval, - 3, args, - 0, NULL ); + 3, args); if (call_result == SUCCESS && (Z_TYPE(zretval) == IS_FALSE || Z_TYPE(zretval) == IS_TRUE)) { ret = (Z_TYPE(zretval) == IS_TRUE); @@ -1263,12 +1255,11 @@ static int user_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, ZVAL_STRING(&zfuncname, USERSTREAM_RMDIR); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, &object, &zfuncname, &zretval, - 2, args, - 0, NULL ); + 2, args); if (call_result == SUCCESS && (Z_TYPE(zretval) == IS_FALSE || Z_TYPE(zretval) == IS_TRUE)) { ret = (Z_TYPE(zretval) == IS_TRUE); @@ -1334,12 +1325,11 @@ static int user_wrapper_metadata(php_stream_wrapper *wrapper, const char *url, i ZVAL_STRING(&zfuncname, USERSTREAM_METADATA); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, &object, &zfuncname, &zretval, - 3, args, - 0, NULL ); + 3, args); if (call_result == SUCCESS && (Z_TYPE(zretval) == IS_FALSE || Z_TYPE(zretval) == IS_TRUE)) { ret = Z_TYPE(zretval) == IS_TRUE; @@ -1382,12 +1372,11 @@ static int user_wrapper_stat_url(php_stream_wrapper *wrapper, const char *url, i ZVAL_STRING(&zfuncname, USERSTREAM_STATURL); - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, &object, &zfuncname, &zretval, - 2, args, - 0, NULL ); + 2, args); if (call_result == SUCCESS && Z_TYPE(zretval) == IS_ARRAY) { /* We got the info we needed */ @@ -1517,11 +1506,11 @@ static int php_userstreamop_cast(php_stream *stream, int castas, void **retptr) break; } - call_result = call_user_function_ex(NULL, + call_result = call_user_function(NULL, Z_ISUNDEF(us->object)? NULL : &us->object, &func_name, &retval, - 1, args, 0, NULL); + 1, args); do { if (call_result == FAILURE) {