From: Antony Dovgal Date: Wed, 21 Feb 2007 14:24:44 +0000 (+0000) Subject: fix bug #40576 (double values are truncated to 6 decimal digits when encoding) X-Git-Tag: RELEASE_1_0_1~197 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8b9bf1e2c3e16ff29dbff4958711210d9d94b3fe;p=php fix bug #40576 (double values are truncated to 6 decimal digits when encoding) --- 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