Commit b8499682c36 for php

commit b8499682c360b2262ffe8581168c24eac5645d74
Author: Alexander Danilov <10532067+adapik@users.noreply.github.com>
Date:   Wed Nov 11 02:53:22 2026 +0200

    tree: use ZSTR_VAL()/ZSTR_LEN() instead of direct zend_string member access (#25375)

    * ext/random: use ZSTR_LEN()/ZSTR_VAL() instead of direct member access

    * ext/standard/mail: use ZSTR_LEN()/ZSTR_VAL() instead of direct member access

    * Zend/Optimizer/zend_dump: use ZSTR_VAL() instead of direct member access

    * zend_operators: use ZSTR_VAL()/ZSTR_LEN() instead of direct member access

    * zend_test: use ZSTR_VAL() instead of direct member access

diff --git a/Zend/Optimizer/zend_dump.c b/Zend/Optimizer/zend_dump.c
index c6cc5193b2d..83dc8c8bab7 100644
--- a/Zend/Optimizer/zend_dump.c
+++ b/Zend/Optimizer/zend_dump.c
@@ -156,7 +156,7 @@ static void zend_dump_unused_op(const zend_op *opline, znode_op op, uint32_t fla
 ZEND_API void zend_dump_var(const zend_op_array *op_array, uint8_t var_type, uint32_t var_num)
 {
 	if (var_type == IS_CV && var_num < op_array->last_var) {
-		fprintf(stderr, "CV%d($%s)", var_num, op_array->vars[var_num]->val);
+		fprintf(stderr, "CV%d($%s)", var_num, ZSTR_VAL(op_array->vars[var_num]));
 	} else if (var_type == IS_VAR) {
 		fprintf(stderr, "V%d", var_num);
 	} else if ((var_type & (IS_VAR|IS_TMP_VAR)) == IS_TMP_VAR) {
@@ -223,9 +223,9 @@ static void zend_dump_type_info(uint32_t info, const zend_class_entry *ce, bool
 		fprintf(stderr, "class");
 		if (ce) {
 			if (is_instanceof) {
-				fprintf(stderr, " (instanceof %s)", ce->name->val);
+				fprintf(stderr, " (instanceof %s)", ZSTR_VAL(ce->name));
 			} else {
-				fprintf(stderr, " (%s)", ce->name->val);
+				fprintf(stderr, " (%s)", ZSTR_VAL(ce->name));
 			}
 		}
 	} else if ((info & MAY_BE_ANY) == MAY_BE_ANY) {
@@ -358,9 +358,9 @@ static void zend_dump_type_info(uint32_t info, const zend_class_entry *ce, bool
 			fprintf(stderr, "object");
 			if (ce) {
 				if (is_instanceof) {
-					fprintf(stderr, " (instanceof %s)", ce->name->val);
+					fprintf(stderr, " (instanceof %s)", ZSTR_VAL(ce->name));
 				} else {
-					fprintf(stderr, " (%s)", ce->name->val);
+					fprintf(stderr, " (%s)", ZSTR_VAL(ce->name));
 				}
 			}
 		}
@@ -931,9 +931,9 @@ void zend_dump_op_array_name(const zend_op_array *op_array)
 {
 	if (op_array->function_name) {
 		if (op_array->scope && op_array->scope->name) {
-			fprintf(stderr, "%s::%s", op_array->scope->name->val, op_array->function_name->val);
+			fprintf(stderr, "%s::%s", ZSTR_VAL(op_array->scope->name), ZSTR_VAL(op_array->function_name));
 		} else {
-			fprintf(stderr, "%s", op_array->function_name->val);
+			fprintf(stderr, "%s", ZSTR_VAL(op_array->function_name));
 		}
 	} else {
 		fprintf(stderr, "%s", "$_main");
@@ -1017,7 +1017,7 @@ ZEND_API void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_fl
 	if (msg) {
 		fprintf(stderr, "     ; (%s)\n", msg);
 	}
-	fprintf(stderr, "     ; %s:%u-%u\n", op_array->filename->val, op_array->line_start, op_array->line_end);
+	fprintf(stderr, "     ; %s:%u-%u\n", ZSTR_VAL(op_array->filename), op_array->line_start, op_array->line_end);

 	if (func_info) {
 		fprintf(stderr, "     ; return ");
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index b9d901b6560..2960b4be140 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -3449,8 +3449,8 @@ ZEND_API bool ZEND_FASTCALL zendi_smart_streq(const zend_string *s1, const zend_
 	zend_long lval1 = 0, lval2 = 0;
 	double dval1 = 0.0, dval2 = 0.0;

-	if ((ret1 = is_numeric_string_ex(s1->val, s1->len, &lval1, &dval1, false, &oflow1, NULL)) &&
-		(ret2 = is_numeric_string_ex(s2->val, s2->len, &lval2, &dval2, false, &oflow2, NULL))) {
+	if ((ret1 = is_numeric_string_ex(ZSTR_VAL(s1), ZSTR_LEN(s1), &lval1, &dval1, false, &oflow1, NULL)) &&
+		(ret2 = is_numeric_string_ex(ZSTR_VAL(s2), ZSTR_LEN(s2), &lval2, &dval2, false, &oflow2, NULL))) {
 #if ZEND_ULONG_MAX == 0xFFFFFFFF
 		if (oflow1 != 0 && oflow1 == oflow2 && dval1 - dval2 == 0. &&
 			((oflow1 == 1 && dval1 > 9007199254740991. /*0x1FFFFFFFFFFFFF*/)
@@ -3497,8 +3497,8 @@ ZEND_API int ZEND_FASTCALL zendi_smart_strcmp(const zend_string *s1, const zend_
 	zend_long lval1 = 0, lval2 = 0;
 	double dval1 = 0.0, dval2 = 0.0;

-	if ((ret1 = is_numeric_string_ex(s1->val, s1->len, &lval1, &dval1, false, &oflow1, NULL)) &&
-		(ret2 = is_numeric_string_ex(s2->val, s2->len, &lval2, &dval2, false, &oflow2, NULL))) {
+	if ((ret1 = is_numeric_string_ex(ZSTR_VAL(s1), ZSTR_LEN(s1), &lval1, &dval1, false, &oflow1, NULL)) &&
+		(ret2 = is_numeric_string_ex(ZSTR_VAL(s2), ZSTR_LEN(s2), &lval2, &dval2, false, &oflow2, NULL))) {
 #if ZEND_ULONG_MAX == 0xFFFFFFFF
 		if (oflow1 != 0 && oflow1 == oflow2 && dval1 - dval2 == 0. &&
 			((oflow1 == 1 && dval1 > 9007199254740991. /*0x1FFFFFFFFFFFFF*/)
@@ -3535,7 +3535,7 @@ ZEND_API int ZEND_FASTCALL zendi_smart_strcmp(const zend_string *s1, const zend_
 	} else {
 		int strcmp_ret;
 string_cmp:
-		strcmp_ret = zend_binary_strcmp(s1->val, s1->len, s2->val, s2->len);
+		strcmp_ret = zend_binary_strcmp(ZSTR_VAL(s1), ZSTR_LEN(s1), ZSTR_VAL(s2), ZSTR_LEN(s2));
 		return ZEND_NORMALIZE_BOOL(strcmp_ret);
 	}
 }
diff --git a/ext/random/random.c b/ext/random/random.c
index 5d341ef4cb7..87faa8dc17d 100644
--- a/ext/random/random.c
+++ b/ext/random/random.c
@@ -348,8 +348,8 @@ PHPAPI zend_string *php_random_bin2hex_le(const void *ptr, const size_t len)
 /* stolen from standard/string.c */
 PHPAPI bool php_random_hex2bin_le(zend_string *hexstr, void *dest)
 {
-	size_t len = hexstr->len >> 1;
-	unsigned char *str = (unsigned char *) hexstr->val, c, l, d;
+	size_t len = ZSTR_LEN(hexstr) >> 1;
+	unsigned char *str = (unsigned char *) ZSTR_VAL(hexstr), c, l, d;
 	unsigned char *ptr = (unsigned char *) dest;
 	int is_letter, i = 0;

diff --git a/ext/standard/mail.c b/ext/standard/mail.c
index 346ed940d8d..db22ef22b2f 100644
--- a/ext/standard/mail.c
+++ b/ext/standard/mail.c
@@ -253,7 +253,7 @@ PHPAPI zend_string *php_mail_build_headers(const HashTable *headers)
 	} ZEND_HASH_FOREACH_END();

 	/* Remove the last \r\n */
-	if (s.s) s.s->len -= 2;
+	if (s.s) ZSTR_LEN(s.s) -= 2;
 	smart_str_0(&s);

 	return s.s;
@@ -471,7 +471,7 @@ PHPAPI bool php_mail(const char *to, const char *subject, const char *message, c

 			time(&curtime);
 			date_str = php_format_date("d-M-Y H:i:s e", 13, curtime, 1);
-			len = spprintf(&tmp, 0, "[%s] %s%s", date_str->val, logline, PHP_EOL);
+			len = spprintf(&tmp, 0, "[%s] %s%s", ZSTR_VAL(date_str), logline, PHP_EOL);

 			php_mail_log_to_file(mail_log, tmp, len);

diff --git a/ext/zend_test/test.c b/ext/zend_test/test.c
index f3a8076a456..b75da6cc9a2 100644
--- a/ext/zend_test/test.c
+++ b/ext/zend_test/test.c
@@ -2331,7 +2331,7 @@ static ZEND_METHOD(_ZendTestClass, takesUnionType)
 	);
 	if (!type_matches) {
 		zend_string *ty = zend_type_to_string(execute_data->func->internal_function.arg_info->type);
-		zend_argument_type_error(1, "must be of type %s, %s given", ty->val, obj->ce->name->val);
+		zend_argument_type_error(1, "must be of type %s, %s given", ZSTR_VAL(ty), ZSTR_VAL(obj->ce->name));
 		zend_string_release(ty);
 		RETURN_THROWS();
 	}
@@ -2392,7 +2392,7 @@ static ZEND_NAMED_FUNCTION(zend_test_internal_dnf_arguments)
 	);
 	if (!type_matches) {
 		zend_string *ty = zend_type_to_string(arginfo_zend_test_internal_dnf_arguments[1].type);
-		zend_argument_type_error(1, "must be of type %s, %s given", ty->val, obj->ce->name->val);
+		zend_argument_type_error(1, "must be of type %s, %s given", ZSTR_VAL(ty), ZSTR_VAL(obj->ce->name));
 		zend_string_release(ty);
 		RETURN_THROWS();
 	}