tony2001 Wed Feb 21 14:24:44 2007 UTC
Added files:
/php-src/ext/xmlrpc/tests bug40576.phpt
Modified files:
/php-src/ext/xmlrpc/libxmlrpc xml_to_xmlrpc.c
Log:
fix bug #40576 (double values are truncated to 6 decimal digits when encoding)
http://cvs.php.net/viewvc.cgi/php-src/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c?r1=1.5&r2=1.6&diff_format=u
Index: php-src/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c
diff -u php-src/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c:1.5
php-src/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c:1.6
--- php-src/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c:1.5 Tue Apr 27 17:33:59 2004
+++ php-src/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c Wed Feb 21 14:24:44 2007
@@ -31,11 +31,13 @@
*/
-static const char rcsid[] = "#(@) $Id: xml_to_xmlrpc.c,v 1.5 2004/04/27
17:33:59 iliaa Exp $";
+static const char rcsid[] = "#(@) $Id: xml_to_xmlrpc.c,v 1.6 2007/02/21
14:24:44 tony2001 Exp $";
#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 @@
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);
http://cvs.php.net/viewvc.cgi/php-src/ext/xmlrpc/tests/bug40576.phpt?view=markup&rev=1.1
Index: php-src/ext/xmlrpc/tests/bug40576.phpt
+++ php-src/ext/xmlrpc/tests/bug40576.phpt
--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
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php