Commit 594dfbe04b3 for php

commit 594dfbe04b3540b4fb354125faddbe35476845eb
Merge: 6903d8c6e90 2a5d6c39160
Author: ndossche <7771979+ndossche@users.noreply.github.com>
Date:   Mon Oct 5 20:00:39 2026 +0200

    Merge branch 'PHP-8.6'

    * PHP-8.6:
      Fix SCCP evaluation of isset()/empty() on dimension of non-escaping object

diff --cc Zend/Optimizer/sccp.c
index 48f67a662e4,42dcb4629fa..07de22f8535
--- a/Zend/Optimizer/sccp.c
+++ b/Zend/Optimizer/sccp.c
@@@ -440,23 -435,13 +440,27 @@@ static inline zend_result ct_eval_isset
  		}
  		return ct_eval_isset_isempty(result, extended_value, value);
  	} else if (Z_TYPE_P(op1) == IS_STRING) {
 -		// TODO
 -		return FAILURE;
 +		zend_long index;
 +		if (zval_to_string_offset(&index, op2) == FAILURE) {
 +			return FAILURE;
 +		}
 +
 +		if (index < 0) {
 +			index += (zend_long) Z_STRLEN_P(op1);
 +		}
 +
 +		bool rv = index >= 0 && index < Z_STRLEN_P(op1);
 +		if (extended_value & ZEND_ISEMPTY) {
 +			rv = !rv || Z_STRVAL_P(op1)[index] == '0';
 +		}
 +
 +		ZVAL_BOOL(result, rv);
 +		return SUCCESS;
+ 	} else if (IS_PARTIAL_OBJECT(op1)) {
+ 		/* Objects may implement ArrayAccess or throw. */
+ 		return FAILURE;
  	} else {
+ 		ZEND_ASSERT(Z_TYPE_P(op1) <= IS_DOUBLE);
  		ZVAL_BOOL(result, (extended_value & ZEND_ISEMPTY));
  		return SUCCESS;
  	}