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;
  }
  /* }}} */