diff options
author | Dmitry Stogov <dmitry@php.net> | 2006-12-19 11:54:38 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2006-12-19 11:54:38 +0000 |
commit | c43fc2afc8fbd3e1fe6a86ac29f8ff81febe79f0 (patch) | |
tree | d6c3c4d229c933050bc8c936c8834a18d964f360 /ext/soap/php_encoding.c | |
parent | 39a7719f859a0a01b7f8fa47c35df77901e25ef0 (diff) | |
download | php-git-c43fc2afc8fbd3e1fe6a86ac29f8ff81febe79f0.tar.gz |
Fixed bug #39815 (SOAP double encoding is not locale-independent)
Diffstat (limited to 'ext/soap/php_encoding.c')
-rw-r--r-- | ext/soap/php_encoding.c | 12 |
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); |