Commit 3afd6d3e756 for php.net
commit 3afd6d3e7569a54fb830f09f868ff914a35d1b14
Author: Weilin Du <108666168+LamentXU123@users.noreply.github.com>
Date: Mon Apr 20 22:57:07 2026 +0800
/ext/standard: Check for empty string in linkinfo() (#21793)
diff --git a/NEWS b/NEWS
index 8c2b185d328..481c4ea2c38 100644
--- a/NEWS
+++ b/NEWS
@@ -166,6 +166,8 @@ PHP NEWS
throw a ValueError. (alexandre-daubois)
. array_change_key_case() now raises a ValueError when an invalid $case
argument value is passed. (Girgias)
+ . linkinfo() now raises a ValueError when the argument is an empty string.
+ (Weilin Du)
- Streams:
. Added so_keepalive, tcp_keepidle, tcp_keepintvl and tcp_keepcnt stream
diff --git a/UPGRADING b/UPGRADING
index f7874c2d347..0e66a96909f 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -88,6 +88,7 @@ PHP 8.6 UPGRADE NOTES
argument value is passed.
. array_change_key_case() now raises a ValueError when an invalid $case
argument value is passed.
+ . linkinfo() now raises a ValueError when the $path argument is empty.
. pathinfo() now raises a ValueError when an invalid $flag
argument value is passed.
. scandir() now raises a ValueError when an invalid $sorting_order
diff --git a/ext/standard/link.c b/ext/standard/link.c
index d92e74bb674..dfd92a0a870 100644
--- a/ext/standard/link.c
+++ b/ext/standard/link.c
@@ -84,7 +84,11 @@ PHP_FUNCTION(linkinfo)
Z_PARAM_PATH(link, link_len)
ZEND_PARSE_PARAMETERS_END();
- // TODO Check for empty string
+ if (UNEXPECTED(link_len == 0)) {
+ zend_argument_must_not_be_empty_error(1);
+ RETURN_THROWS();
+ }
+
dirname = estrndup(link, link_len);
zend_dirname(dirname, link_len);
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_error1.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_error1.phpt
index f4035f8f40a..c8420ea86fb 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_error1.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_error1.phpt
@@ -27,8 +27,11 @@
echo "\n*** Testing linkinfo() for error conditions ***\n";
//invalid arguments
-var_dump( linkinfo('') ); // empty string as linkname
-var_dump( linkinfo(false) ); // boolean false as linkname
+try {
+ var_dump(linkinfo('')); // empty string as linkname
+} catch (ValueError $e) {
+ echo $e->getMessage() . "\n";
+}
echo "Done\n";
?>
@@ -53,10 +56,5 @@
bool(false)
*** Testing linkinfo() for error conditions ***
-
-Warning: linkinfo(): %s in %s on line %d
-int(-1)
-
-Warning: linkinfo(): %s in %s on line %d
-int(-1)
+linkinfo(): Argument #1 ($path) must not be empty
Done