From bccae9a134731ee32a8b1ef4a13afa92e8af4856 Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Wed, 21 Feb 2007 14:25:27 +0000 Subject: [PATCH] MFH: fix #40576 (double values are truncated to 6 decimal digits when encoding) --- NEWS | 2 + ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c | 11 +++-- ext/xmlrpc/tests/bug40576.phpt | 72 ++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 ext/xmlrpc/tests/bug40576.phpt diff --git a/NEWS b/NEWS index 21346e22c0..61b90265a5 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,8 @@ PHP NEWS - Added --ri switch to CLI which allows to check extension information. (Marcus) - Added tidyNode::getParent() method (John, Nuno) - Fixed zend_llist_remove_tail (Michael Wallner, Dmitry) +- Fixed bug #40576 (double values are truncated to 6 decimal digits when + encoding). (Tony) - Fixed bug #40560 (DIR functions do not work on root UNC path). (Dmitry) - Fixed bug #40548 (SplFileInfo::getOwner/getGroup give a warning on broken symlink). (Marcus) diff --git a/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c b/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c index 4caf9e3afd..78643754cd 100644 --- a/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c +++ b/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c @@ -36,6 +36,8 @@ static const char rcsid[] = "#(@) $Id$"; #ifdef _WIN32 #include "xmlrpc_win32.h" #endif +#include "php.h" +#include "main/snprintf.h" #include #include #include "xml_to_xmlrpc.h" @@ -225,9 +227,12 @@ xml_element* XMLRPC_to_xml_element_worker(XMLRPC_VALUE current_vector, XMLRPC_VA simplestring_add(&elem_val->text, buf); break; case xmlrpc_double: - elem_val->name = strdup(ELEM_DOUBLE); - snprintf(buf, BUF_SIZE, "%f", XMLRPC_GetValueDouble(node)); - simplestring_add(&elem_val->text, buf); + { + TSRMLS_FETCH(); + elem_val->name = strdup(ELEM_DOUBLE); + ap_php_snprintf(buf, BUF_SIZE, "%.*G", (int) EG(precision), XMLRPC_GetValueDouble(node)); + simplestring_add(&elem_val->text, buf); + } break; case xmlrpc_datetime: elem_val->name = strdup(ELEM_DATETIME); diff --git a/ext/xmlrpc/tests/bug40576.phpt b/ext/xmlrpc/tests/bug40576.phpt new file mode 100644 index 0000000000..2060cb4fcc --- /dev/null +++ b/ext/xmlrpc/tests/bug40576.phpt @@ -0,0 +1,72 @@ +--TEST-- +Bug #40576 (double values are truncated to 6 decimal digits when encoding) +--INI-- +precision=12 +--FILE-- + +--EXPECTF-- +string(125) " + + + + 1.123456789 + + + +" +string(128) " + + + + 11234567891000 + + + +" +string(116) " + + + + 11234567 + + + +" +string(106) " + + + + + + + +" +string(118) " + + + + test + + + +" +string(139) " + + + + 1.22222222222222222222222 + + + +" +Done -- 2.50.1