From c43fc2afc8fbd3e1fe6a86ac29f8ff81febe79f0 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 19 Dec 2006 11:54:38 +0000 Subject: Fixed bug #39815 (SOAP double encoding is not locale-independent) --- ext/soap/php_encoding.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'ext/soap/php_encoding.c') diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index b401d6d430..0f0b281c25 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -961,19 +961,23 @@ static xmlNodePtr to_xml_double(encodeTypePtr type, zval *data, int style, xmlNo { xmlNodePtr ret; zval tmp; + char *str; + TSRMLS_FETCH(); ret = xmlNewNode(NULL, BAD_CAST("BOGUS")); xmlAddChild(parent, ret); FIND_ZVAL_NULL(data, ret, style); tmp = *data; - zval_copy_ctor(&tmp); if (Z_TYPE(tmp) != IS_DOUBLE) { + zval_copy_ctor(&tmp); convert_to_double(&tmp); } - convert_to_string(&tmp); - xmlNodeSetContentLen(ret, BAD_CAST(Z_STRVAL(tmp)), Z_STRLEN(tmp)); - zval_dtor(&tmp); + + str = (char *) emalloc(MAX_LENGTH_OF_DOUBLE + EG(precision) + 1); + php_gcvt(Z_DVAL(tmp), EG(precision), '.', 'E', str); + xmlNodeSetContentLen(ret, BAD_CAST(str), strlen(str)); + efree(str); if (style == SOAP_ENCODED) { set_ns_and_type(ret, type); -- cgit v1.2.1