Commit e0892576acb for php.net
commit e0892576acbd54bf0f27794b1c36cfd1a8400e78
Merge: 8dbb532937e 84d83425806
Author: Ilia Alshanetsky <ilia@ilia.ws>
Date: Wed Jun 24 08:07:24 2026 -0400
Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4:
Fix posix_getpwnam()/posix_getpwuid() crash on NULL passwd fields
diff --cc ext/posix/posix.c
index b7acf8c7512,38f7eaa4186..fcacb25ae32
--- a/ext/posix/posix.c
+++ b/ext/posix/posix.c
@@@ -915,17 -903,41 +915,37 @@@ try_again
}
/* }}} */
-int php_posix_passwd_to_array(struct passwd *pw, zval *return_value) /* {{{ */
+static void php_posix_passwd_to_array(struct passwd *pw, zval *return_value) /* {{{ */
{
- if (NULL == pw)
- return 0;
- if (NULL == return_value || Z_TYPE_P(return_value) != IS_ARRAY)
- return 0;
+ ZEND_ASSERT(Z_TYPE_P(return_value) == IS_ARRAY);
- add_assoc_string(return_value, "name", pw->pw_name);
- add_assoc_string(return_value, "passwd", pw->pw_passwd);
- add_assoc_long (return_value, "uid", pw->pw_uid);
- add_assoc_long (return_value, "gid", pw->pw_gid);
- add_assoc_string(return_value, "gecos", pw->pw_gecos);
- add_assoc_string(return_value, "dir", pw->pw_dir);
- add_assoc_string(return_value, "shell", pw->pw_shell);
+ if (pw->pw_name) {
+ add_assoc_string(return_value, "name", pw->pw_name);
+ } else {
+ add_assoc_null(return_value, "name");
+ }
+ if (pw->pw_passwd) {
+ add_assoc_string(return_value, "passwd", pw->pw_passwd);
+ } else {
+ add_assoc_null(return_value, "passwd");
+ }
+ add_assoc_long(return_value, "uid", pw->pw_uid);
+ add_assoc_long(return_value, "gid", pw->pw_gid);
+ if (pw->pw_gecos) {
+ add_assoc_string(return_value, "gecos", pw->pw_gecos);
+ } else {
+ add_assoc_null(return_value, "gecos");
+ }
+ if (pw->pw_dir) {
+ add_assoc_string(return_value, "dir", pw->pw_dir);
+ } else {
+ add_assoc_null(return_value, "dir");
+ }
+ if (pw->pw_shell) {
+ add_assoc_string(return_value, "shell", pw->pw_shell);
+ } else {
+ add_assoc_null(return_value, "shell");
+ }
- return 1;
}
/* }}} */