diff options
| author | Antony Dovgal <tony2001@php.net> | 2007-02-21 14:25:27 +0000 |
|---|---|---|
| committer | Antony Dovgal <tony2001@php.net> | 2007-02-21 14:25:27 +0000 |
| commit | bccae9a134731ee32a8b1ef4a13afa92e8af4856 (patch) | |
| tree | b8c90ebe37a042a016367ca073655d0ed31e5739 | |
| parent | 149dd625bef9a76a5ac5d7652bab7d0b490b3f9c (diff) | |
| download | php-git-bccae9a134731ee32a8b1ef4a13afa92e8af4856.tar.gz | |
MFH: fix #40576 (double values are truncated to 6 decimal digits when encoding)
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c | 11 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug40576.phpt | 72 |
3 files changed, 82 insertions, 3 deletions
@@ -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 <string.h> #include <stdlib.h> #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-- +<?php + +var_dump(xmlrpc_encode(1.123456789)); +var_dump(xmlrpc_encode(11234567891010)); +var_dump(xmlrpc_encode(11234567)); +var_dump(xmlrpc_encode("")); +var_dump(xmlrpc_encode("test")); +var_dump(xmlrpc_encode("1.22222222222222222222222")); + +echo "Done\n"; +?> +--EXPECTF-- +string(125) "<?xml version="1.0" encoding="utf-8"?> +<params> +<param> + <value> + <double>1.123456789</double> + </value> +</param> +</params> +" +string(128) "<?xml version="1.0" encoding="utf-8"?> +<params> +<param> + <value> + <double>11234567891000</double> + </value> +</param> +</params> +" +string(116) "<?xml version="1.0" encoding="utf-8"?> +<params> +<param> + <value> + <int>11234567</int> + </value> +</param> +</params> +" +string(106) "<?xml version="1.0" encoding="utf-8"?> +<params> +<param> + <value> + <string/> + </value> +</param> +</params> +" +string(118) "<?xml version="1.0" encoding="utf-8"?> +<params> +<param> + <value> + <string>test</string> + </value> +</param> +</params> +" +string(139) "<?xml version="1.0" encoding="utf-8"?> +<params> +<param> + <value> + <string>1.22222222222222222222222</string> + </value> +</param> +</params> +" +Done |
