@@ -549,15 +549,7 @@ ZEND_API void ZEND_FASTCALL convert_to_boolean(zval *op) /* {{{ */
549549
550550ZEND_API void ZEND_FASTCALL _convert_to_cstring (zval * op ) /* {{{ */
551551{
552- if (Z_TYPE_P (op ) == IS_DOUBLE ) {
553- zend_string * str ;
554- double dval = Z_DVAL_P (op );
555-
556- str = zend_strpprintf_unchecked (0 , "%.*H" , (int ) EG (precision ), dval );
557- ZVAL_NEW_STR (op , str );
558- } else {
559- _convert_to_string (op );
560- }
552+ _convert_to_string (op );
561553}
562554/* }}} */
563555
@@ -590,8 +582,17 @@ ZEND_API void ZEND_FASTCALL _convert_to_string(zval *op) /* {{{ */
590582 zend_string * str ;
591583 double dval = Z_DVAL_P (op );
592584
593- str = zend_strpprintf (0 , "%.*G" , (int ) EG (precision ), dval );
594- /* %G already handles removing trailing zeros from the fractional part, yay */
585+ str = zend_strpprintf_unchecked (0 , "%.*H" , (int ) EG (precision ), dval );
586+
587+ if (EG (debug_locale_sensitive_float_casts )) {
588+ zend_string * original_str = zend_strpprintf (0 , "%.*G" , (int ) EG (precision ), dval );
589+
590+ if (!zend_string_equals (str , original_str )) {
591+ zend_error (E_WARNING , "Locale-independent float to string conversion" );
592+ }
593+ zend_string_release (original_str );
594+ }
595+
595596 ZVAL_NEW_STR (op , str );
596597 break ;
597598 }
@@ -900,7 +901,18 @@ static zend_always_inline zend_string* __zval_get_string_func(zval *op, zend_boo
900901 return zend_long_to_str (Z_LVAL_P (op ));
901902 }
902903 case IS_DOUBLE : {
903- return zend_strpprintf (0 , "%.*G" , (int ) EG (precision ), Z_DVAL_P (op ));
904+ zend_string * str = zend_strpprintf_unchecked (0 , "%.*H" , (int ) EG (precision ), Z_DVAL_P (op ));
905+
906+ if (EG (debug_locale_sensitive_float_casts )) {
907+ zend_string * original_str = zend_strpprintf (0 , "%.*G" , (int ) EG (precision ), Z_DVAL_P (op ));
908+
909+ if (!zend_string_equals (str , original_str )) {
910+ zend_error (E_WARNING , "Locale-independent float to string conversion" );
911+ }
912+ zend_string_release (original_str );
913+ }
914+
915+ return str ;
904916 }
905917 case IS_ARRAY :
906918 zend_error (E_WARNING , "Array to string conversion" );
0 commit comments