diff options
| author | Rasmus Lerdorf <rasmus@php.net> | 2006-06-15 20:49:05 +0000 |
|---|---|---|
| committer | Rasmus Lerdorf <rasmus@php.net> | 2006-06-15 20:49:05 +0000 |
| commit | 12022014fade5be728c868e4b163a64747ec02e7 (patch) | |
| tree | 39eacf3ff87f254d50707a5411db4af1e3e58387 /ext | |
| parent | 1dbaae2795b756a3875c53da00b277f241cc04b8 (diff) | |
| download | php-git-12022014fade5be728c868e4b163a64747ec02e7.tar.gz | |
MFH:
I don't think the call to xmlNodeSetContentLen() is needed here and
it is causing performance problems because it tries to parse the blob
and create a subtree. Because we are escaping the string anyway, we
are never going to get a subtree, but the entity parsing that is done
by xmlNodeSetContentLen() is killing performance on large blobs of
text. On one recent example it took a couple of minutes to parse
whereas if we just create a text node like this and set the contents
to the raw string it is down to milliseconds.
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/soap/php_encoding.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 195ae4d448..118f8bc952 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -727,7 +727,7 @@ static zval *to_zval_hexbin(encodeTypePtr type, xmlNodePtr data) static xmlNodePtr to_xml_string(encodeTypePtr type, zval *data, int style, xmlNodePtr parent) { - xmlNodePtr ret; + xmlNodePtr ret, text; char *str; int new_len; TSRMLS_FETCH(); @@ -737,13 +737,15 @@ static xmlNodePtr to_xml_string(encodeTypePtr type, zval *data, int style, xmlNo FIND_ZVAL_NULL(data, ret, style); if (Z_TYPE_P(data) == IS_STRING) { - str = php_escape_html_entities(Z_STRVAL_P(data), Z_STRLEN_P(data), &new_len, 0, 0, NULL TSRMLS_CC); + str = estrndup(Z_STRVAL_P(data), Z_STRLEN_P(data)); + new_len = Z_STRLEN_P(data); } else { zval tmp = *data; zval_copy_ctor(&tmp); convert_to_string(&tmp); - str = php_escape_html_entities(Z_STRVAL(tmp), Z_STRLEN(tmp), &new_len, 0, 0, NULL TSRMLS_CC); + str = estrndup(Z_STRVAL(tmp), Z_STRLEN(tmp)); + new_len = Z_STRLEN(tmp); zval_dtor(&tmp); } @@ -765,7 +767,8 @@ static xmlNodePtr to_xml_string(encodeTypePtr type, zval *data, int style, xmlNo soap_error1(E_ERROR, "Encoding: string '%s' is not a valid utf-8 string", str); } - xmlNodeSetContentLen(ret, str, new_len); + text = xmlNewTextLen(str, new_len); + xmlAddChild(ret, text); efree(str); if (style == SOAP_ENCODED) { |
