Hello Antony,

Wednesday, February 21, 2007, 3:24:44 PM, you wrote:

> 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));

You don't have to use ap_php_snprintf() here. The problem before seemed to
be an issue with not including "main/snprintf.h" which might result in not
using our implementation.

> +                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




Best regards,
 Marcus

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to