diff options
Diffstat (limited to 'ext/soap/php_encoding.c')
-rw-r--r-- | ext/soap/php_encoding.c | 106 |
1 files changed, 36 insertions, 70 deletions
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index f4341eccb9..3a7f3a243c 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -1381,7 +1381,7 @@ static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNod if (Z_TYPE_P(data) == IS_ARRAY) { sdlAttributePtr *arrayType; - xmlAttrPtr *arrayTypeAttr; + sdlExtraAttributePtr *ext; sdlTypePtr elementType; i = zend_hash_num_elements(Z_ARRVAL_P(data)); @@ -1391,24 +1391,21 @@ static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNod zend_hash_find(sdl_type->attributes, SOAP_1_1_ENC_NAMESPACE":arrayType", sizeof(SOAP_1_1_ENC_NAMESPACE":arrayType"), (void **)&arrayType) == SUCCESS && - zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arrayType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&arrayTypeAttr) == SUCCESS) { + zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arrayType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&ext) == SUCCESS) { - char *ns = NULL, *value, *end; - xmlNsPtr myNs; + char *value, *end; zval** el; - parse_namespace((*arrayTypeAttr)->children->content, &value, &ns); - myNs = xmlSearchNs((*arrayTypeAttr)->doc, (*arrayTypeAttr)->parent, ns); - + value = estrdup((*ext)->val); end = strrchr(value,'['); if (end) { *end = '\0'; end++; dimension = calc_dimension(end); } - if (myNs != NULL) { - enc = get_encoder(SOAP_GLOBAL(sdl), myNs->href, value); - get_type_str(xmlParam, myNs->href, value, &array_type); + if ((*ext)->ns != NULL) { + enc = get_encoder(SOAP_GLOBAL(sdl), (*ext)->ns, value); + get_type_str(xmlParam, (*ext)->ns, value, &array_type); } else { smart_str_appends(&array_type, value); } @@ -1434,38 +1431,25 @@ static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNod } efree(value); - if (ns) efree(ns); } else if (sdl_type && sdl_type->attributes && zend_hash_find(sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":itemType", sizeof(SOAP_1_2_ENC_NAMESPACE":itemType"), (void **)&arrayType) == SUCCESS && - zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":itemType", sizeof(WSDL_NAMESPACE":itemType"), (void **)&arrayTypeAttr) == SUCCESS) { - char *name, *ns; - xmlNsPtr nsptr; - xmlAttrPtr attr; - - attr = *arrayTypeAttr; - parse_namespace(attr->children->content, &name, &ns); - nsptr = xmlSearchNs(attr->doc, attr->parent, ns); - - if (nsptr != NULL) { - enc = get_encoder(SOAP_GLOBAL(sdl), nsptr->href, name); - get_type_str(xmlParam, nsptr->href, name, &array_type); + zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":itemType", sizeof(WSDL_NAMESPACE":itemType"), (void **)&ext) == SUCCESS) { + if ((*ext)->ns != NULL) { + enc = get_encoder(SOAP_GLOBAL(sdl), (*ext)->ns, (*ext)->val); + get_type_str(xmlParam, (*ext)->ns, (*ext)->val, &array_type); } else { - smart_str_appends(&array_type, name); + smart_str_appends(&array_type, (*ext)->val); } - efree(name); - if (ns) {efree(ns);} if (zend_hash_find(sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize", sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"), (void **)&arrayType) == SUCCESS && - zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&arrayTypeAttr) == SUCCESS) { - attr = *arrayTypeAttr; - - dimension = calc_dimension_12(attr->children->content); - dims = get_position_12(dimension, attr->children->content); + zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&ext) == SUCCESS) { + dimension = calc_dimension_12((*ext)->val); + dims = get_position_12(dimension, (*ext)->val); if (dims[0] == 0) {dims[0] = i;} smart_str_append_long(&array_size, dims[0]); @@ -1483,13 +1467,9 @@ static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNod zend_hash_find(sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize", sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"), (void **)&arrayType) == SUCCESS && - zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraySize"), (void **)&arrayTypeAttr) == SUCCESS) { - xmlAttrPtr attr; - - attr = *arrayTypeAttr; - - dimension = calc_dimension_12(attr->children->content); - dims = get_position_12(dimension, attr->children->content); + zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraySize"), (void **)&ext) == SUCCESS) { + dimension = calc_dimension_12((*ext)->val); + dims = get_position_12(dimension, (*ext)->val); if (dims[0] == 0) {dims[0] = i;} smart_str_append_long(&array_size, dims[0]); @@ -1575,9 +1555,10 @@ static zval *to_zval_array(encodeTypePtr type, xmlNodePtr data) int dimension = 1; int* dims = NULL; int* pos = NULL; - xmlAttrPtr attr, *tmp; + xmlAttrPtr attr; sdlPtr sdl; sdlAttributePtr *arrayType; + sdlExtraAttributePtr *ext; sdlTypePtr elementType; TSRMLS_FETCH(); @@ -1641,23 +1622,19 @@ static zval *to_zval_array(encodeTypePtr type, xmlNodePtr data) zend_hash_find(type->sdl_type->attributes, SOAP_1_1_ENC_NAMESPACE":arrayType", sizeof(SOAP_1_1_ENC_NAMESPACE":arrayType"), (void **)&arrayType) == SUCCESS && - zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arrayType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&tmp) == SUCCESS) { - char *type, *end, *ns; - xmlNsPtr nsptr; - - attr = *tmp; - parse_namespace(attr->children->content, &type, &ns); - nsptr = xmlSearchNs(attr->doc, attr->parent, ns); + zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arrayType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&ext) == SUCCESS) { + char *type, *end; + type = estrdup((*ext)->val); end = strrchr(type,'['); if (end) { *end = '\0'; } - if (nsptr != NULL) { - enc = get_encoder(SOAP_GLOBAL(sdl), nsptr->href, type); + if ((*ext)->ns != NULL) { + enc = get_encoder(SOAP_GLOBAL(sdl), (*ext)->ns, type); } efree(type); - if (ns) {efree(ns);} + dims = emalloc(sizeof(int)); *dims = 0; @@ -1666,28 +1643,18 @@ static zval *to_zval_array(encodeTypePtr type, xmlNodePtr data) zend_hash_find(type->sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":itemType", sizeof(SOAP_1_2_ENC_NAMESPACE":itemType"), (void **)&arrayType) == SUCCESS && - zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":itemType", sizeof(WSDL_NAMESPACE":itemType"), (void **)&tmp) == SUCCESS) { - - char *name, *ns; - xmlNsPtr nsptr; - - attr = *tmp; - parse_namespace(attr->children->content, &name, &ns); - nsptr = xmlSearchNs(attr->doc, attr->parent, ns); + zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":itemType", sizeof(WSDL_NAMESPACE":itemType"), (void **)&ext) == SUCCESS) { - if (nsptr != NULL) { - enc = get_encoder(SOAP_GLOBAL(sdl), nsptr->href, name); + if ((*ext)->ns != NULL) { + enc = get_encoder(SOAP_GLOBAL(sdl), (*ext)->ns, (*ext)->val); } - efree(name); - if (ns) {efree(ns);} if (zend_hash_find(type->sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize", sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"), (void **)&arrayType) == SUCCESS && - zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&tmp) == SUCCESS) { - attr = *tmp; - dimension = calc_dimension_12(attr->children->content); - dims = get_position_12(dimension, attr->children->content); + zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&ext) == SUCCESS) { + dimension = calc_dimension_12((*ext)->val); + dims = get_position_12(dimension, (*ext)->val); } else { dims = emalloc(sizeof(int)); *dims = 0; @@ -1697,11 +1664,10 @@ static zval *to_zval_array(encodeTypePtr type, xmlNodePtr data) zend_hash_find(type->sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize", sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"), (void **)&arrayType) == SUCCESS && - zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&tmp) == SUCCESS) { + zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&ext) == SUCCESS) { - attr = *tmp; - dimension = calc_dimension_12(attr->children->content); - dims = get_position_12(dimension, attr->children->content); + dimension = calc_dimension_12((*ext)->val); + dims = get_position_12(dimension, (*ext)->val); if (type->sdl_type && type->sdl_type->elements && zend_hash_num_elements(type->sdl_type->elements) == 1 && (elementType = *(sdlTypePtr*)type->sdl_type->elements->pListHead->pData) != NULL && @@ -2373,7 +2339,7 @@ xmlNsPtr encode_add_ns(xmlNodePtr node, const char* ns) char* prefix; TSRMLS_FETCH(); - if (zend_hash_find(SOAP_GLOBAL(defEncNs), (char*)ns, strlen(ns) + 1, (void **)&prefix) == SUCCESS) { + if (zend_hash_find(&SOAP_GLOBAL(defEncNs), (char*)ns, strlen(ns) + 1, (void **)&prefix) == SUCCESS) { xmlns = xmlNewNs(node->doc->children,ns,prefix); } else { smart_str prefix = {0}; |