From baccc0ead0018d2f7de68216a5b5dc2dfd6a0a2f Mon Sep 17 00:00:00 2001 From: lamentxu <1372449351@qq.com> Date: Sat, 18 Apr 2026 09:55:21 +0800 Subject: [PATCH 1/3] Update link.c --- ext/standard/link.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ext/standard/link.c b/ext/standard/link.c index d92e74bb6743..e86f261ec0b0 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)) { + php_error_docref(NULL, E_WARNING, "%s", strerror(ENOENT)); + RETURN_LONG(Z_L(-1)); + } + dirname = estrndup(link, link_len); zend_dirname(dirname, link_len); From ee2a1a64e87ac48f46ac7095ced116fb09625649 Mon Sep 17 00:00:00 2001 From: lamentxu <1372449351@qq.com> Date: Sun, 19 Apr 2026 09:48:36 +0800 Subject: [PATCH 2/3] switch to ValueError --- ext/standard/link.c | 4 ++-- .../symlink_link_linkinfo_is_link_error1.phpt | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/ext/standard/link.c b/ext/standard/link.c index e86f261ec0b0..dfd92a0a8709 100644 --- a/ext/standard/link.c +++ b/ext/standard/link.c @@ -85,8 +85,8 @@ PHP_FUNCTION(linkinfo) ZEND_PARSE_PARAMETERS_END(); if (UNEXPECTED(link_len == 0)) { - php_error_docref(NULL, E_WARNING, "%s", strerror(ENOENT)); - RETURN_LONG(Z_L(-1)); + zend_argument_must_not_be_empty_error(1); + RETURN_THROWS(); } dirname = estrndup(link, 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 f4035f8f40a2..de4b37bf48ae 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,16 @@ var_dump( symlink($filename, false) ); // false as linkname 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"; +} +try { + var_dump(linkinfo(false)); // boolean false as linkname +} catch (ValueError $e) { + echo $e->getMessage() . "\n"; +} echo "Done\n"; ?> @@ -54,9 +62,6 @@ 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 +linkinfo(): Argument #1 ($path) must not be empty Done From 1acce31f33db3a64d93599db1b339fe5a1602ff1 Mon Sep 17 00:00:00 2001 From: lamentxu <1372449351@qq.com> Date: Sun, 19 Apr 2026 11:09:53 +0800 Subject: [PATCH 3/3] fix ci --- .../tests/file/symlink_link_linkinfo_is_link_error1.phpt | 1 - 1 file changed, 1 deletion(-) 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 de4b37bf48ae..9b4754531633 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 @@ -61,7 +61,6 @@ Warning: symlink(): %s in %s on line %d bool(false) *** Testing linkinfo() for error conditions *** - linkinfo(): Argument #1 ($path) must not be empty linkinfo(): Argument #1 ($path) must not be empty Done