Skip to content

Commit 0280b83

Browse files
committed
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.
1 parent 4a0d690 commit 0280b83

File tree

8 files changed

+41
-52
lines changed

8 files changed

+41
-52
lines changed

Zend/zend_API.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -500,9 +500,9 @@ ZEND_API int add_property_zval_ex(zval *arg, const char *key, size_t key_len, zv
500500

501501
ZEND_API int _call_user_function_ex(zval *object, zval *function_name, zval *retval_ptr, uint32_t param_count, zval params[], int no_separation);
502502

503-
#define call_user_function(function_table, object, function_name, retval_ptr, param_count, params) \
503+
#define call_user_function(_unused, object, function_name, retval_ptr, param_count, params) \
504504
_call_user_function_ex(object, function_name, retval_ptr, param_count, params, 1)
505-
#define call_user_function_ex(function_table, object, function_name, retval_ptr, param_count, params, no_separation, symbol_table) \
505+
#define call_user_function_ex(_unused, object, function_name, retval_ptr, param_count, params, no_separation, _unused2) \
506506
_call_user_function_ex(object, function_name, retval_ptr, param_count, params, no_separation)
507507

508508
ZEND_API extern const zend_fcall_info empty_fcall_info;

ext/ldap/ldap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3748,7 +3748,7 @@ int _ldap_rebind_proc(LDAP *ldap, const char *url, ber_tag_t req, ber_int_t msgi
37483748
/* callback */
37493749
ZVAL_COPY_VALUE(&cb_args[0], cb_link);
37503750
ZVAL_STRING(&cb_args[1], url);
3751-
if (call_user_function_ex(EG(function_table), NULL, &ld->rebindproc, &cb_retval, 2, cb_args, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) {
3751+
if (call_user_function(EG(function_table), NULL, &ld->rebindproc, &cb_retval, 2, cb_args) == SUCCESS && !Z_ISUNDEF(cb_retval)) {
37523752
retval = zval_get_long(&cb_retval);
37533753
zval_ptr_dtor(&cb_retval);
37543754
} else {

ext/openssl/xp_ssl.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1149,7 +1149,7 @@ static void php_openssl_limit_handshake_reneg(const SSL *ssl) /* {{{ */
11491149

11501150
/* Closing the stream inside this callback would segfault! */
11511151
stream->flags |= PHP_STREAM_FLAG_NO_FCLOSE;
1152-
if (FAILURE == call_user_function_ex(NULL, NULL, val, &retval, 1, &param, 0, NULL)) {
1152+
if (FAILURE == call_user_function(NULL, NULL, val, &retval, 1, &param)) {
11531153
php_error(E_WARNING, "SSL: failed invoking reneg limit notification callback");
11541154
}
11551155
stream->flags ^= PHP_STREAM_FLAG_NO_FCLOSE;

ext/standard/streamsfuncs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -859,7 +859,7 @@ static void user_space_stream_notifier(php_stream_context *context, int notifyco
859859
ZVAL_LONG(&zvs[4], bytes_sofar);
860860
ZVAL_LONG(&zvs[5], bytes_max);
861861

862-
if (FAILURE == call_user_function_ex(NULL, NULL, callback, &retval, 6, zvs, 0, NULL)) {
862+
if (FAILURE == call_user_function(NULL, NULL, callback, &retval, 6, zvs)) {
863863
php_error_docref(NULL, E_WARNING, "Failed to call user notifier");
864864
}
865865
for (i = 0; i < 6; i++) {

ext/standard/user_filters.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,15 +174,15 @@ php_stream_filter_status_t userfilter_filter(
174174
} else {
175175
ZVAL_NULL(&args[2]);
176176
}
177+
ZVAL_MAKE_REF(&args[2]);
177178

178179
ZVAL_BOOL(&args[3], flags & PSFS_FLAG_FLUSH_CLOSE);
179180

180-
call_result = call_user_function_ex(NULL,
181+
call_result = call_user_function(NULL,
181182
obj,
182183
&func_name,
183184
&retval,
184-
4, args,
185-
0, NULL);
185+
4, args);
186186

187187
zval_ptr_dtor(&func_name);
188188

ext/standard/var_unserializer.re

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1097,7 +1097,7 @@ object ":" uiv ":" ["] {
10971097

10981098
ZVAL_STR_COPY(&args[0], class_name);
10991099
BG(serialize_lock)++;
1100-
if (call_user_function_ex(NULL, NULL, &user_func, &retval, 1, args, 0, NULL) != SUCCESS) {
1100+
if (call_user_function(NULL, NULL, &user_func, &retval, 1, args) != SUCCESS) {
11011101
BG(serialize_lock)--;
11021102
if (EG(exception)) {
11031103
zend_string_release_ex(class_name, 0);

ext/zip/php_zip.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2929,7 +2929,7 @@ static void _php_zip_progress_callback(zip_t *arch, double state, void *ptr)
29292929
ze_zip_object *obj = ptr;
29302930

29312931
ZVAL_DOUBLE(&cb_args[0], state);
2932-
if (call_user_function_ex(EG(function_table), NULL, &obj->progress_callback, &cb_retval, 1, cb_args, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) {
2932+
if (call_user_function(EG(function_table), NULL, &obj->progress_callback, &cb_retval, 1, cb_args) == SUCCESS && !Z_ISUNDEF(cb_retval)) {
29332933
zval_ptr_dtor(&cb_retval);
29342934
}
29352935
}
@@ -2985,7 +2985,7 @@ static int _php_zip_cancel_callback(zip_t *arch, void *ptr)
29852985
int retval = 0;
29862986
ze_zip_object *obj = ptr;
29872987

2988-
if (call_user_function_ex(EG(function_table), NULL, &obj->cancel_callback, &cb_retval, 0, NULL, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) {
2988+
if (call_user_function(EG(function_table), NULL, &obj->cancel_callback, &cb_retval, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) {
29892989
retval = zval_get_long(&cb_retval);
29902990
zval_ptr_dtor(&cb_retval);
29912991
}

main/streams/userspace.c

Lines changed: 30 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -373,12 +373,11 @@ static php_stream *user_wrapper_opener(php_stream_wrapper *wrapper, const char *
373373
ZVAL_STRING(&zfuncname, USERSTREAM_OPEN);
374374

375375
zend_try {
376-
call_result = call_user_function_ex(NULL,
376+
call_result = call_user_function(NULL,
377377
Z_ISUNDEF(us->object)? NULL : &us->object,
378378
&zfuncname,
379379
&zretval,
380-
4, args,
381-
0, NULL );
380+
4, args);
382381
} zend_catch {
383382
FG(user_stream_current_filename) = NULL;
384383
zend_bailout();
@@ -452,12 +451,11 @@ static php_stream *user_wrapper_opendir(php_stream_wrapper *wrapper, const char
452451

453452
ZVAL_STRING(&zfuncname, USERSTREAM_DIR_OPEN);
454453

455-
call_result = call_user_function_ex(NULL,
454+
call_result = call_user_function(NULL,
456455
Z_ISUNDEF(us->object)? NULL : &us->object,
457456
&zfuncname,
458457
&zretval,
459-
2, args,
460-
0, NULL );
458+
2, args);
461459

462460
if (call_result == SUCCESS && Z_TYPE(zretval) != IS_UNDEF && zval_is_true(&zretval)) {
463461
/* the stream is now open! */
@@ -601,12 +599,11 @@ static ssize_t php_userstreamop_write(php_stream *stream, const char *buf, size_
601599

602600
ZVAL_STRINGL(&args[0], (char*)buf, count);
603601

604-
call_result = call_user_function_ex(NULL,
602+
call_result = call_user_function(NULL,
605603
Z_ISUNDEF(us->object)? NULL : &us->object,
606604
&func_name,
607605
&retval,
608-
1, args,
609-
0, NULL);
606+
1, args);
610607
zval_ptr_dtor(&args[0]);
611608
zval_ptr_dtor(&func_name);
612609

@@ -655,12 +652,11 @@ static ssize_t php_userstreamop_read(php_stream *stream, char *buf, size_t count
655652

656653
ZVAL_LONG(&args[0], count);
657654

658-
call_result = call_user_function_ex(NULL,
655+
call_result = call_user_function(NULL,
659656
Z_ISUNDEF(us->object)? NULL : &us->object,
660657
&func_name,
661658
&retval,
662-
1, args,
663-
0, NULL);
659+
1, args);
664660

665661
zval_ptr_dtor(&args[0]);
666662
zval_ptr_dtor(&func_name);
@@ -796,12 +792,11 @@ static int php_userstreamop_seek(php_stream *stream, zend_off_t offset, int when
796792
ZVAL_LONG(&args[0], offset);
797793
ZVAL_LONG(&args[1], whence);
798794

799-
call_result = call_user_function_ex(NULL,
795+
call_result = call_user_function(NULL,
800796
Z_ISUNDEF(us->object)? NULL : &us->object,
801797
&func_name,
802798
&retval,
803-
2, args,
804-
0, NULL);
799+
2, args);
805800

806801
zval_ptr_dtor(&args[0]);
807802
zval_ptr_dtor(&args[1]);
@@ -969,11 +964,11 @@ static int php_userstreamop_set_option(php_stream *stream, int option, int value
969964
/* TODO wouldblock */
970965
ZVAL_STRINGL(&func_name, USERSTREAM_LOCK, sizeof(USERSTREAM_LOCK)-1);
971966

972-
call_result = call_user_function_ex(NULL,
967+
call_result = call_user_function(NULL,
973968
Z_ISUNDEF(us->object)? NULL : &us->object,
974969
&func_name,
975970
&retval,
976-
1, args, 0, NULL);
971+
1, args);
977972

978973
if (call_result == SUCCESS && (Z_TYPE(retval) == IS_FALSE || Z_TYPE(retval) == IS_TRUE)) {
979974
ret = (Z_TYPE(retval) == IS_FALSE);
@@ -1010,11 +1005,11 @@ static int php_userstreamop_set_option(php_stream *stream, int option, int value
10101005
ptrdiff_t new_size = *(ptrdiff_t*) ptrparam;
10111006
if (new_size >= 0 && new_size <= (ptrdiff_t)LONG_MAX) {
10121007
ZVAL_LONG(&args[0], (zend_long)new_size);
1013-
call_result = call_user_function_ex(NULL,
1008+
call_result = call_user_function(NULL,
10141009
Z_ISUNDEF(us->object)? NULL : &us->object,
10151010
&func_name,
10161011
&retval,
1017-
1, args, 0, NULL);
1012+
1, args);
10181013
if (call_result == SUCCESS && Z_TYPE(retval) != IS_UNDEF) {
10191014
if (Z_TYPE(retval) == IS_FALSE || Z_TYPE(retval) == IS_TRUE) {
10201015
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
10741069
break;
10751070
}
10761071

1077-
call_result = call_user_function_ex(NULL,
1072+
call_result = call_user_function(NULL,
10781073
Z_ISUNDEF(us->object)? NULL : &us->object,
10791074
&func_name,
10801075
&retval,
1081-
3, args, 0, NULL);
1076+
3, args);
10821077

10831078
if (call_result == FAILURE) {
10841079
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
11241119

11251120
ZVAL_STRING(&zfuncname, USERSTREAM_UNLINK);
11261121

1127-
call_result = call_user_function_ex(NULL,
1122+
call_result = call_user_function(NULL,
11281123
&object,
11291124
&zfuncname,
11301125
&zretval,
1131-
1, args,
1132-
0, NULL );
1126+
1, args);
11331127

11341128
if (call_result == SUCCESS && (Z_TYPE(zretval) == IS_FALSE || Z_TYPE(zretval) == IS_TRUE)) {
11351129
ret = (Z_TYPE(zretval) == IS_TRUE);
@@ -1169,12 +1163,11 @@ static int user_wrapper_rename(php_stream_wrapper *wrapper, const char *url_from
11691163

11701164
ZVAL_STRING(&zfuncname, USERSTREAM_RENAME);
11711165

1172-
call_result = call_user_function_ex(NULL,
1166+
call_result = call_user_function(NULL,
11731167
&object,
11741168
&zfuncname,
11751169
&zretval,
1176-
2, args,
1177-
0, NULL );
1170+
2, args);
11781171

11791172
if (call_result == SUCCESS && (Z_TYPE(zretval) == IS_FALSE || Z_TYPE(zretval) == IS_TRUE)) {
11801173
ret = (Z_TYPE(zretval) == IS_TRUE);
@@ -1216,12 +1209,11 @@ static int user_wrapper_mkdir(php_stream_wrapper *wrapper, const char *url, int
12161209

12171210
ZVAL_STRING(&zfuncname, USERSTREAM_MKDIR);
12181211

1219-
call_result = call_user_function_ex(NULL,
1212+
call_result = call_user_function(NULL,
12201213
&object,
12211214
&zfuncname,
12221215
&zretval,
1223-
3, args,
1224-
0, NULL );
1216+
3, args);
12251217

12261218
if (call_result == SUCCESS && (Z_TYPE(zretval) == IS_FALSE || Z_TYPE(zretval) == IS_TRUE)) {
12271219
ret = (Z_TYPE(zretval) == IS_TRUE);
@@ -1263,12 +1255,11 @@ static int user_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url,
12631255

12641256
ZVAL_STRING(&zfuncname, USERSTREAM_RMDIR);
12651257

1266-
call_result = call_user_function_ex(NULL,
1258+
call_result = call_user_function(NULL,
12671259
&object,
12681260
&zfuncname,
12691261
&zretval,
1270-
2, args,
1271-
0, NULL );
1262+
2, args);
12721263

12731264
if (call_result == SUCCESS && (Z_TYPE(zretval) == IS_FALSE || Z_TYPE(zretval) == IS_TRUE)) {
12741265
ret = (Z_TYPE(zretval) == IS_TRUE);
@@ -1334,12 +1325,11 @@ static int user_wrapper_metadata(php_stream_wrapper *wrapper, const char *url, i
13341325

13351326
ZVAL_STRING(&zfuncname, USERSTREAM_METADATA);
13361327

1337-
call_result = call_user_function_ex(NULL,
1328+
call_result = call_user_function(NULL,
13381329
&object,
13391330
&zfuncname,
13401331
&zretval,
1341-
3, args,
1342-
0, NULL );
1332+
3, args);
13431333

13441334
if (call_result == SUCCESS && (Z_TYPE(zretval) == IS_FALSE || Z_TYPE(zretval) == IS_TRUE)) {
13451335
ret = Z_TYPE(zretval) == IS_TRUE;
@@ -1382,12 +1372,11 @@ static int user_wrapper_stat_url(php_stream_wrapper *wrapper, const char *url, i
13821372

13831373
ZVAL_STRING(&zfuncname, USERSTREAM_STATURL);
13841374

1385-
call_result = call_user_function_ex(NULL,
1375+
call_result = call_user_function(NULL,
13861376
&object,
13871377
&zfuncname,
13881378
&zretval,
1389-
2, args,
1390-
0, NULL );
1379+
2, args);
13911380

13921381
if (call_result == SUCCESS && Z_TYPE(zretval) == IS_ARRAY) {
13931382
/* We got the info we needed */
@@ -1517,11 +1506,11 @@ static int php_userstreamop_cast(php_stream *stream, int castas, void **retptr)
15171506
break;
15181507
}
15191508

1520-
call_result = call_user_function_ex(NULL,
1509+
call_result = call_user_function(NULL,
15211510
Z_ISUNDEF(us->object)? NULL : &us->object,
15221511
&func_name,
15231512
&retval,
1524-
1, args, 0, NULL);
1513+
1, args);
15251514

15261515
do {
15271516
if (call_result == FAILURE) {

0 commit comments

Comments
 (0)