]> granicus.if.org Git - php/commitdiff
fix bug #40576 (double values are truncated to 6 decimal digits when encoding)
authorAntony Dovgal <tony2001@php.net>
Wed, 21 Feb 2007 14:24:44 +0000 (14:24 +0000)
committerAntony Dovgal <tony2001@php.net>
Wed, 21 Feb 2007 14:24:44 +0000 (14:24 +0000)
ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c
ext/xmlrpc/tests/bug40576.phpt [new file with mode: 0644]

index 4caf9e3afd2222f0fc9e35d07eab32ac1a70b0a9..78643754cd3e67faffabc145a56a1e72d2983725 100644 (file)
@@ -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 (file)
index 0000000..2060cb4
--- /dev/null
@@ -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