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

Reply via email to