summaryrefslogtreecommitdiff
path: root/ext/soap/php_packet_soap.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/soap/php_packet_soap.c')
-rw-r--r--ext/soap/php_packet_soap.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/ext/soap/php_packet_soap.c b/ext/soap/php_packet_soap.c
index 9ed55d2b1d..5f14eb8c5d 100644
--- a/ext/soap/php_packet_soap.c
+++ b/ext/soap/php_packet_soap.c
@@ -192,15 +192,25 @@ int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunction
tmp = get_node(fault->children, "faultstring");
if (tmp != NULL && tmp->children != NULL) {
zval *zv = master_to_zval(get_conversion(IS_STRING), tmp);
- faultstring = Z_STRVAL_P(zv);
- FREE_ZVAL(zv);
+ if (Z_TYPE_P(zv) == IS_STRING) {
+ faultstring = Z_STRVAL_P(zv);
+ FREE_ZVAL(zv);
+ } else {
+ faultstring = soap_unicode_to_string(Z_USTRVAL_P(zv), Z_USTRLEN_P(zv) TSRMLS_CC);
+ zval_ptr_dtor(&zv);
+ }
}
tmp = get_node(fault->children, "faultactor");
if (tmp != NULL && tmp->children != NULL) {
zval *zv = master_to_zval(get_conversion(IS_STRING), tmp);
- faultactor = Z_STRVAL_P(zv);
- FREE_ZVAL(zv);
+ if (Z_TYPE_P(zv) == IS_STRING) {
+ faultactor = Z_STRVAL_P(zv);
+ FREE_ZVAL(zv);
+ } else {
+ faultactor = soap_unicode_to_string(Z_USTRVAL_P(zv), Z_USTRLEN_P(zv) TSRMLS_CC);
+ zval_ptr_dtor(&zv);
+ }
}
tmp = get_node(fault->children, "detail");
@@ -222,8 +232,13 @@ int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunction
tmp = get_node(tmp->children,"Text");
if (tmp != NULL && tmp->children != NULL) {
zval *zv = master_to_zval(get_conversion(IS_STRING), tmp);
- faultstring = Z_STRVAL_P(zv);
- FREE_ZVAL(zv);
+ if (Z_TYPE_P(zv) == IS_STRING) {
+ faultstring = Z_STRVAL_P(zv);
+ FREE_ZVAL(zv);
+ } else {
+ faultstring = soap_unicode_to_string(Z_USTRVAL_P(zv), Z_USTRLEN_P(zv) TSRMLS_CC);
+ zval_ptr_dtor(&zv);
+ }
}
}