[php-src] master: Merge branch 'PHP-8.5'
Daniel Scherzer <[email protected]>
| Newsgroups | gmane.comp.php.cvs.general |
|---|---|
| Message-ID | <[email protected]> |
Author: Daniel Scherzer (DanielEScherzer)
Date: 2026-07-13T07:26:22-07:00
Commit: https://github.com/php/php-src/commit/aaa141aa6620f74b264c0309ca0cad792e968fa7
Raw diff: https://github.com/php/php-src/commit/aaa141aa6620f74b264c0309ca0cad792e968fa7.diff
Merge branch 'PHP-8.5'
* PHP-8.5:
Fix GH-22683: Reflection(Class)Constant::__toString() should not warn on NAN conversions (#22694)
Changed paths:
A ext/reflection/tests/gh22683.phpt
M NEWS
M ext/reflection/php_reflection.c
Diff:
diff --git a/NEWS b/NEWS
index 8c29466dcc64..fb54cab61c0f 100644
--- a/NEWS
+++ b/NEWS
@@ -90,6 +90,10 @@ PHP NEWS
. Fixed off-by-one in phpdbg_safe_class_lookup() causing class lookups to
always fail during phpdbg's signal-safe interruption path. (jorgsowa)
+- Reflection:
+ . Fixed bug GH-22683 (Reflection(Class)Constant::__toString() should not warn
+ on NAN conversions). (Khaled Alam)
+
- Session:
. Fixed bug GH-21314 (Different session garbage collector behavior between
PHP 8.3 and PHP 8.5). (jorgsowa)
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index f04bd020b770..13df0b2bbb4d 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -609,6 +609,8 @@ static void _const_string(smart_str *str, const char *name, zval *value, const c
smart_str_append(str, ZSTR_KNOWN(ZEND_STR_ARRAY_CAPITALIZED));
} else if (Z_TYPE_P(value) == IS_STRING) {
smart_str_append(str, Z_STR_P(value));
+ } else if (Z_TYPE_P(value) == IS_DOUBLE) {
+ smart_str_append_double(str, Z_DVAL_P(value), (int) EG(precision), false);
} else {
zend_string *tmp_value_str;
zend_string *value_str = zval_get_tmp_string(value, &tmp_value_str);
@@ -641,6 +643,8 @@ static void _class_const_string(smart_str *str, const zend_string *name, zend_cl
smart_str_appends(str, "Array");
} else if (Z_TYPE(c->value) == IS_OBJECT) {
smart_str_appends(str, "Object");
+ } else if (Z_TYPE(c->value) == IS_DOUBLE) {
+ smart_str_append_double(str, Z_DVAL(c->value), (int) EG(precision), false);
} else {
zend_string *tmp_value_str;
zend_string *value_str = zval_get_tmp_string(&c->value, &tmp_value_str);
diff --git a/ext/reflection/tests/gh22683.phpt b/ext/reflection/tests/gh22683.phpt
new file mode 100644
index 000000000000..9dfe8eba25c2
--- /dev/null
+++ b/ext/reflection/tests/gh22683.phpt
@@ -0,0 +1,28 @@
+--TEST--
+GH-22683 (Reflection(Class)Constant::__toString() should not warn on NAN conversions)
+--FILE--
+<?php
+
+echo new ReflectionConstant('NAN');
+echo new ReflectionConstant('INF');
+
+class Demo {
+ public const MY_NAN = NAN;
+ public const MY_INF = INF;
+ public const MY_FLOAT = 1.5;
+ public const MY_WHOLE = 2.0;
+}
+
+echo new ReflectionClassConstant(Demo::class, 'MY_NAN');
+echo new ReflectionClassConstant(Demo::class, 'MY_INF');
+echo new ReflectionClassConstant(Demo::class, 'MY_FLOAT');
+echo new ReflectionClassConstant(Demo::class, 'MY_WHOLE');
+
+?>
+--EXPECT--
+Constant [ <persistent> float NAN ] { NAN }
+Constant [ <persistent> float INF ] { INF }
+Constant [ public float MY_NAN ] { NAN }
+Constant [ public float MY_INF ] { INF }
+Constant [ public float MY_FLOAT ] { 1.5 }
+Constant [ public float MY_WHOLE ] { 2 }