From 59a375431204936f49c608c3ad7c3a66416a7a0b Mon Sep 17 00:00:00 2001 From: Oleg Efimov Date: Thu, 29 May 2025 15:12:07 +0100 Subject: [PATCH 1/2] Fix GH-18695: float numbers zero fraction is now preserved in zend_ast_export() --- Zend/tests/ast/ast_serialize_floats.phpt | 26 ++++++++++++++++++++++++ Zend/zend_ast.c | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 Zend/tests/ast/ast_serialize_floats.phpt diff --git a/Zend/tests/ast/ast_serialize_floats.phpt b/Zend/tests/ast/ast_serialize_floats.phpt new file mode 100644 index 0000000000000..164b8b03338cf --- /dev/null +++ b/Zend/tests/ast/ast_serialize_floats.phpt @@ -0,0 +1,26 @@ +--TEST-- +Serialization of floats are correct +--INI-- +zend.assertions=1 +--FILE-- +getMessage(), ' failed', PHP_EOL; +} +try { + assert(!is_float(1.1)); +} catch (AssertionError $e) { + echo 'assert(): ', $e->getMessage(), ' failed', PHP_EOL; +} +try { + assert(!is_float(1234.5678)); +} catch (AssertionError $e) { + echo 'assert(): ', $e->getMessage(), ' failed', PHP_EOL; +} +?> +--EXPECT-- +assert(): assert(!is_float(0.0)) failed +assert(): assert(!is_float(1.1)) failed +assert(): assert(!is_float(1234.5678)) failed diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index 0fb50e2eae1f5..f8c4ca17a9b95 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -1563,7 +1563,7 @@ static ZEND_COLD void zend_ast_export_zval(smart_str *str, zval *zv, int priorit break; case IS_DOUBLE: smart_str_append_double( - str, Z_DVAL_P(zv), (int) EG(precision), /* zero_fraction */ false); + str, Z_DVAL_P(zv), (int) EG(precision), /* zero_fraction */ true); break; case IS_STRING: smart_str_appendc(str, '\''); From 6aeea9ce1eee705ba2af011aafcc4f1052296cc0 Mon Sep 17 00:00:00 2001 From: DanielEScherzer Date: Thu, 29 May 2025 13:08:50 -0700 Subject: [PATCH 2/2] Add NEWS --- NEWS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NEWS b/NEWS index f790b5164cb36..d19747e685686 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 8.3.23 +- Core: + . Fixed GH-18695 (zend_ast_export() - float number is not preserved). + (Oleg Efimov) + - Date: . Fix leaks with multiple calls to DatePeriod iterator current(). (nielsdos)