Commit 0f78dbaab2c for php.net

commit 0f78dbaab2c183c210d223fd1b153c0bf8525298
Author: Gina Peter Banyard <girgias@php.net>
Date:   Wed Jul 15 19:33:48 2026 +0100

    streams: use built-in argument handling for warnings instead of 2 param functions (#22749)

    Since all warnings can now display the arguments of the call, the stream layer can just piggyback on-top of it instead of the additional complexity of handling it.

    This is only a first step as there is still the 1 param variant that needs to be converted.

diff --git a/ext/standard/tests/file/rename_variation.phpt b/ext/standard/tests/file/rename_variation.phpt
index b86c5c80973..88ad26080f4 100644
--- a/ext/standard/tests/file/rename_variation.phpt
+++ b/ext/standard/tests/file/rename_variation.phpt
@@ -55,7 +55,7 @@
 bool(true)
 -- Iteration 2 --

-Warning: rename(%s,%s): Not a directory in %s on line %d
+Warning: rename(): Not a directory in %s on line %d
 bool(false)
 bool(false)
 bool(false)
diff --git a/ext/standard/tests/file/rename_variation12.phpt b/ext/standard/tests/file/rename_variation12.phpt
index 8675b17aab5..954c1242723 100644
--- a/ext/standard/tests/file/rename_variation12.phpt
+++ b/ext/standard/tests/file/rename_variation12.phpt
@@ -2,6 +2,9 @@
 Test rename() function : variation - various relative, absolute paths
 --CREDITS--
 Dave Kelsey <d_kelsey@uk.ibm.com>
+--INI--
+zend.exception_string_param_max_len=1000000
+error_include_args=On
 --SKIPIF--
 <?php
 if (substr(PHP_OS, 0, 3) == 'WIN') die('skip..  not for Windows');
@@ -83,12 +86,12 @@

 -- Iteration 5 --

-Warning: rename(%s/renameVar12/renameVar12Sub/..///renameVar12Sub//..//../renameVar12Sub/renameMe.tmp,%s/renameVar12/renameVar12Sub/..///renameVar12Sub//..//../renameVar12Sub/IwasRenamed.tmp): %s in %s on line %d
+Warning: rename('%s/renameVar12/renameVar12Sub/..///renameVar12Sub//..//../renameVar12Sub/renameMe.tmp', '%s/renameVar12/renameVar12Sub/..///renameVar12Sub//..//../renameVar12Sub/IwasRenamed.tmp'): %s in %s on line %d
 bool(false)

 -- Iteration 6 --

-Warning: rename(%s/renameVar12/renameVar12Sub/BADDIR/renameMe.tmp,%s/renameVar12/renameVar12Sub/BADDIR/IwasRenamed.tmp): %s in %s on line %d
+Warning: rename('%s/renameVar12/renameVar12Sub/BADDIR/renameMe.tmp', '%s/renameVar12/renameVar12Sub/BADDIR/IwasRenamed.tmp'): %s in %s on line %d
 bool(false)

 -- Iteration 7 --
@@ -109,7 +112,7 @@

 -- Iteration 11 --

-Warning: rename(BADDIR/renameMe.tmp,BADDIR/IwasRenamed.tmp): %s in %s on line %d
+Warning: rename('BADDIR/renameMe.tmp', 'BADDIR/IwasRenamed.tmp'): %s in %s on line %d
 bool(false)

 *** Done ***
diff --git a/ext/standard/tests/file/rename_variation13.phpt b/ext/standard/tests/file/rename_variation13.phpt
index 1fa95f37266..e53cf86f16b 100644
--- a/ext/standard/tests/file/rename_variation13.phpt
+++ b/ext/standard/tests/file/rename_variation13.phpt
@@ -2,6 +2,9 @@
 Test rename() function : variation - various invalid paths
 --CREDITS--
 Dave Kelsey <d_kelsey@uk.ibm.com>
+--INI--
+zend.exception_string_param_max_len=1000000
+error_include_args=On
 --SKIPIF--
 <?php
 if(substr(PHP_OS, 0, 3) == "WIN")
@@ -56,43 +59,43 @@
 -- testing '-1' --
 bool(true)

-Warning: rename(-1,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+Warning: rename('-1', '%s/renameVar13/afile.tmp'): No such file or directory in %s on line %d
 bool(false)
 -- testing '1' --
 bool(true)

-Warning: rename(1,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+Warning: rename('1', '%s/renameVar13/afile.tmp'): No such file or directory in %s on line %d
 bool(false)
 -- testing '' --

-Warning: rename(%s/renameVar13/afile.tmp,): %s in %s on line %d
+Warning: rename('%s/renameVar13/afile.tmp', ''): %s in %s on line %d
 bool(false)

-Warning: rename(,%s/renameVar13/afile.tmp): %s in %s on line %d
+Warning: rename('', '%s/renameVar13/afile.tmp'): %s in %s on line %d
 bool(false)
 -- testing '' --

-Warning: rename(%s/renameVar13/afile.tmp,): %s in %s on line %d
+Warning: rename('%s/renameVar13/afile.tmp', ''): %s in %s on line %d
 bool(false)

-Warning: rename(,%s/renameVar13/afile.tmp): %s in %s on line %d
+Warning: rename('', '%s/renameVar13/afile.tmp'): %s in %s on line %d
 bool(false)
 -- testing ' ' --
 bool(true)

-Warning: rename( ,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+Warning: rename(' ', '%s/renameVar13/afile.tmp'): No such file or directory in %s on line %d
 bool(false)
 -- testing '/no/such/file/dir' --

-Warning: rename(%s/renameVar13/afile.tmp,/no/such/file/dir): No such file or directory in %s on line %d
+Warning: rename('%s/renameVar13/afile.tmp', '/no/such/file/dir'): No such file or directory in %s on line %d
 bool(false)

-Warning: rename(/no/such/file/dir,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+Warning: rename('/no/such/file/dir', '%s/renameVar13/afile.tmp'): No such file or directory in %s on line %d
 bool(false)
 -- testing 'php/php' --

-Warning: rename(%s/renameVar13/afile.tmp,php/php): %s directory in %s on line %d
+Warning: rename('%s/renameVar13/afile.tmp', 'php/php'): %s directory in %s on line %d
 bool(false)

-Warning: rename(php/php,%s/renameVar13/afile.tmp): %s directory in %s on line %d
+Warning: rename('php/php', '%s/renameVar13/afile.tmp'): %s directory in %s on line %d
 bool(false)
diff --git a/ext/standard/tests/file/rename_variation5.phpt b/ext/standard/tests/file/rename_variation5.phpt
index 04a4e23c7c9..0010935da45 100644
--- a/ext/standard/tests/file/rename_variation5.phpt
+++ b/ext/standard/tests/file/rename_variation5.phpt
@@ -70,7 +70,7 @@

 -- Renaming existing link to existing directory name --

-Warning: rename(%s,%s): Is a directory in %s on line %d
+Warning: rename(): Is a directory in %s on line %d
 bool(false)

 -- Renaming existing link to existing file name --
@@ -78,7 +78,7 @@

 -- Renaming existing file to existing directory name --

-Warning: rename(%s,%s): Is a directory in %s on line %d
+Warning: rename(): Is a directory in %s on line %d
 bool(false)

 -- Renaming existing file to existing link name --
@@ -86,11 +86,11 @@

 -- Renaming existing directory to existing file name --

-Warning: rename(%s,%s): Not a directory in %s on line %d
+Warning: rename(): Not a directory in %s on line %d
 bool(false)

 -- Renaming existing directory to existing link name --

-Warning: rename(%s,%s): Not a directory in %s on line %d
+Warning: rename(): Not a directory in %s on line %d
 bool(false)
 Done
diff --git a/ext/standard/tests/file/rename_variation8.phpt b/ext/standard/tests/file/rename_variation8.phpt
index 89d4bab7f0f..d2bca9ffed1 100644
--- a/ext/standard/tests/file/rename_variation8.phpt
+++ b/ext/standard/tests/file/rename_variation8.phpt
@@ -46,7 +46,7 @@
 --EXPECTF--
 *** Testing rename() on non-existing file ***

-Warning: rename(%s/non_existent_file.tmp,%s/rename_variation8_new.tmp): No such file or directory in %s on line %d
+Warning: rename(): No such file or directory in %s on line %d
 bool(false)
 bool(false)
 bool(false)
@@ -58,7 +58,7 @@

 *** Testing rename() on non-existing directory ***

-Warning: rename(%s/non_existent_dir,%s/rename_basic_dir2): No such file or directory in %s on line %d
+Warning: rename(): No such file or directory in %s on line %d
 bool(false)
 bool(false)
 bool(false)
diff --git a/main/streams/php_stream_errors.h b/main/streams/php_stream_errors.h
index 1642a6bdabd..239a34ff870 100644
--- a/main/streams/php_stream_errors.h
+++ b/main/streams/php_stream_errors.h
@@ -135,11 +135,6 @@ PHPAPI void php_stream_wrapper_error_param(php_stream_wrapper *wrapper, php_stre
 		zend_enum_StreamErrorCode code, const char *param, const char *fmt, ...)
 		ZEND_ATTRIBUTE_FORMAT(printf, 9, 10);

-PHPAPI void php_stream_wrapper_error_param2(php_stream_wrapper *wrapper,
-		php_stream_context *context, const char *docref, int options, int severity,
-		bool terminating, zend_enum_StreamErrorCode code, const char *param1, const char *param2,
-		const char *fmt, ...) ZEND_ATTRIBUTE_FORMAT(printf, 10, 11);
-
 PHPAPI void php_stream_error(php_stream *stream, const char *docref, int severity,
 		bool terminating, zend_enum_StreamErrorCode code, const char *fmt, ...)
 		ZEND_ATTRIBUTE_FORMAT(printf, 6, 7);
@@ -194,16 +189,6 @@ PHPAPI void php_stream_tidy_wrapper_error_log(php_stream_wrapper *wrapper);
 			wrapper, context, NULL, options, E_WARNING, false, \
 			PHP_STREAM_EC(code), param, __VA_ARGS__)

-#define php_stream_wrapper_warn_param2(wrapper, context, options, code, param1, param2, ...) \
-	php_stream_wrapper_error_param2( \
-			wrapper, context, NULL, options, E_WARNING, true, \
-			PHP_STREAM_EC(code), param1, param2, __VA_ARGS__)
-
-#define php_stream_wrapper_warn_param2_nt(wrapper, context, options, code, param1, param2, ...) \
-	php_stream_wrapper_error_param2( \
-			wrapper, context, NULL, options, E_WARNING, false, \
-			PHP_STREAM_EC(code), param1, param2, __VA_ARGS__)
-
 #define php_stream_warn(stream, code, ...) \
 	php_stream_error(stream, NULL, E_WARNING, true, PHP_STREAM_EC(code), __VA_ARGS__)

diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c
index 9335ab3fdb6..9a98873b5d3 100644
--- a/main/streams/plain_wrapper.c
+++ b/main/streams/plain_wrapper.c
@@ -1385,8 +1385,8 @@ static int php_plain_files_rename(php_stream_wrapper *wrapper, const char *url_f
 						if (errno != EPERM) {
 							success = 0;
 						}
-						php_stream_wrapper_error_param2(wrapper, context, NULL, options, E_WARNING,
-								!success, PHP_STREAM_EC(ChownFailed), url_from, url_to,
+						php_stream_wrapper_error(wrapper, context, NULL, options, E_WARNING,
+								!success, PHP_STREAM_EC(ChownFailed),
 								"%s", php_socket_strerror_s(errno, errstr, sizeof(errstr)));
 					}

@@ -1395,8 +1395,8 @@ static int php_plain_files_rename(php_stream_wrapper *wrapper, const char *url_f
 							if (errno != EPERM) {
 								success = 0;
 							}
-							php_stream_wrapper_error_param2(wrapper, context, NULL, options, E_WARNING,
-									!success, PHP_STREAM_EC(ChownFailed), url_from, url_to,
+							php_stream_wrapper_error(wrapper, context, NULL, options, E_WARNING,
+									!success, PHP_STREAM_EC(ChownFailed),
 									"%s", php_socket_strerror_s(errno, errstr, sizeof(errstr)));
 						}
 					}
@@ -1405,13 +1405,11 @@ static int php_plain_files_rename(php_stream_wrapper *wrapper, const char *url_f
 						VCWD_UNLINK(url_from);
 					}
 				} else {
-					php_stream_wrapper_warn_param2_nt(wrapper, context, options, StatFailed,
-							url_from, url_to,
+					php_stream_wrapper_warn_nt(wrapper, context, options, StatFailed,
 							"%s", php_socket_strerror_s(errno, errstr, sizeof(errstr)));
 				}
 			} else {
-				php_stream_wrapper_warn_param2_nt(wrapper, context, options, CopyFailed,
-						url_from, url_to,
+				php_stream_wrapper_warn_nt(wrapper, context, options, CopyFailed,
 						"%s", php_socket_strerror_s(errno, errstr, sizeof(errstr)));
 			}
 #  if !defined(ZTS) && !defined(TSRM_WIN32)
@@ -1425,8 +1423,8 @@ static int php_plain_files_rename(php_stream_wrapper *wrapper, const char *url_f
 #ifdef PHP_WIN32
 		php_win32_docref2_from_error(GetLastError(), url_from, url_to);
 #else
-		php_stream_wrapper_warn_param2(wrapper, context, options,
-				RenameFailed, url_from, url_to,
+		php_stream_wrapper_warn(wrapper, context, options,
+				RenameFailed,
 				"%s", php_socket_strerror_s(errno, errstr, sizeof(errstr)));
 #endif
 		return 0;
diff --git a/main/streams/stream_errors.c b/main/streams/stream_errors.c
index 87de69c35c0..3b64e6ba39c 100644
--- a/main/streams/stream_errors.c
+++ b/main/streams/stream_errors.c
@@ -646,29 +646,6 @@ PHPAPI void php_stream_wrapper_error_param(php_stream_wrapper *wrapper, php_stre
 			code, param_copy, message);
 }

-PHPAPI void php_stream_wrapper_error_param2(php_stream_wrapper *wrapper,
-		php_stream_context *context, const char *docref, int options, int severity,
-		bool terminating, zend_enum_StreamErrorCode code, const char *param1, const char *param2,
-		const char *fmt, ...)
-{
-	if (!(options & REPORT_ERRORS)) {
-		return;
-	}
-
-	char *combined_param;
-	spprintf(&combined_param, 0, "%s,%s", param1, param2);
-
-	va_list args;
-	va_start(args, fmt);
-	zend_string *message = vstrpprintf(0, fmt, args);
-	va_end(args);
-
-	const char *wrapper_name = PHP_STREAM_ERROR_WRAPPER_NAME(wrapper);
-
-	php_stream_wrapper_error_internal(wrapper_name, context, docref, options, severity, terminating,
-			code, combined_param, message);
-}
-
 /* Stream error reporting */

 PHPAPI void php_stream_error(php_stream *stream, const char *docref, int severity,