summaryrefslogtreecommitdiff
path: root/ext/soap/php_encoding.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/soap/php_encoding.c')
-rw-r--r--ext/soap/php_encoding.c12
1 files changed, 8 insertions, 4 deletions
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);