Commit 949fdc41d9f for php.net

commit 949fdc41d9fc2f5a0d39b8eca381a4a8f5dabe99
Merge: a0d06f1c296 af780bc2fa1
Author: Ilia Alshanetsky <ilia@ilia.ws>
Date:   Fri Jul 31 16:46:55 2026 -0400

    Merge branch 'PHP-8.5'

    * PHP-8.5:
      ext/sysvshm: don't orphan the segment shm_attach() just created

diff --cc ext/sysvshm/sysvshm.c
index 6ca06be935d,179fe0ed139..24403290677
--- a/ext/sysvshm/sysvshm.c
+++ b/ext/sysvshm/sysvshm.c
@@@ -126,17 -130,11 +126,18 @@@ PHP_FUNCTION(shm_attach
  	sysvshm_shm *shm_list_ptr;
  	char *shm_ptr;
  	sysvshm_chunk_head *chunk_ptr;
 -	zend_long shm_key, shm_id, shm_size, shm_flag = 0666;
 -	bool shm_size_is_null = 1;
 +	zend_long shm_key_arg, shm_id, shm_size, shm_flag = 0666;
 +	key_t shm_key;
 +	bool shm_size_is_null = true;
+ 	bool created = false;

 -	if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS(), "l|l!l", &shm_key, &shm_size, &shm_size_is_null, &shm_flag)) {
 +	if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS(), "l|l!l", &shm_key_arg, &shm_size, &shm_size_is_null, &shm_flag)) {
 +		RETURN_THROWS();
 +	}
 +
 +	shm_key = (key_t) shm_key_arg;
 +	if ((zend_long) shm_key != shm_key_arg) {
 +		zend_argument_value_error(1, "is out of range");
  		RETURN_THROWS();
  	}

@@@ -156,13 -154,17 +157,17 @@@
  			RETURN_FALSE;
  		}
  		if ((shm_id = shmget(shm_key, shm_size, shm_flag | IPC_CREAT | IPC_EXCL)) < 0) {
 -			php_error_docref(NULL, E_WARNING, "Failed for key 0x" ZEND_XLONG_FMT ": %s", shm_key, strerror(errno));
 +			php_error_docref(NULL, E_WARNING, "Failed for key 0x" ZEND_XLONG_FMT ": %s", shm_key_arg, strerror(errno));
  			RETURN_FALSE;
  		}
+ 		created = true;
  	}

  	if ((shm_ptr = shmat(shm_id, NULL, 0)) == (void *) -1) {
 -		php_error_docref(NULL, E_WARNING, "Failed for key 0x" ZEND_XLONG_FMT ": %s", shm_key, strerror(errno));
 +		php_error_docref(NULL, E_WARNING, "Failed for key 0x" ZEND_XLONG_FMT ": %s", shm_key_arg, strerror(errno));
+ 		if (created) {
+ 			shmctl(shm_id, IPC_RMID, NULL);
+ 		}
  		RETURN_FALSE;
  	}