diff options
author | Marcus Alves Grando <mnag@FreeBSD.org> | 2006-12-14 22:38:17 +0000 |
---|---|---|
committer | Marcus Alves Grando <mnag@FreeBSD.org> | 2006-12-14 22:38:17 +0000 |
commit | c2ba091528076bb439259f6a95c7a8d714c11aad (patch) | |
tree | 22c1cdc10824840b822ceb49eb3a7353ef47ceb4 /net/php5-soap | |
parent | 60029f7216f178c1624ef3dc8ef58f42fd10b0f9 (diff) | |
download | ports-c2ba091528076bb439259f6a95c7a8d714c11aad.tar.gz ports-c2ba091528076bb439259f6a95c7a8d714c11aad.zip |
Notes
Diffstat (limited to 'net/php5-soap')
-rw-r--r-- | net/php5-soap/Makefile | 1 | ||||
-rw-r--r-- | net/php5-soap/files/patch-cvs_5_2 | 271 |
2 files changed, 272 insertions, 0 deletions
diff --git a/net/php5-soap/Makefile b/net/php5-soap/Makefile index 3d87d6a4a5f5..b197572ba280 100644 --- a/net/php5-soap/Makefile +++ b/net/php5-soap/Makefile @@ -5,6 +5,7 @@ # $FreeBSD$ # +PORTREVISION= 1 CATEGORIES= net MASTERDIR= ${.CURDIR}/../../lang/php5 diff --git a/net/php5-soap/files/patch-cvs_5_2 b/net/php5-soap/files/patch-cvs_5_2 new file mode 100644 index 000000000000..d2e8b78f4cbb --- /dev/null +++ b/net/php5-soap/files/patch-cvs_5_2 @@ -0,0 +1,271 @@ +# Obtained from PHP_5_2 CVS in 20061214 +# +# php_encoding.c: +# +# Fixed decoding list of arrays (related to bug #39121) +# Fixed bug #38536 (SOAP returns an array of values instead of an object) +# Fixed bug #39454 (Returning a SOAP array segfaults PHP) +# +# php_http.c: +# +# Replace non-threadsafe rand() with php_rand_r() +# +# php_packet_soap.c: +# +# Fixed bug #39121 (Incorrect return array handling in non-wsdl soap client) +# +# php_sdl.c: +# +# Small hash table optimization +# +Index: php_encoding.c +=================================================================== +RCS file: /repository/php-src/ext/soap/php_encoding.c,v +retrieving revision 1.103.2.21.2.13 +retrieving revision 1.103.2.21.2.16 +diff -u -r1.103.2.21.2.13 -r1.103.2.21.2.16 +--- php_encoding.c 24 Oct 2006 05:20:50 -0000 1.103.2.21.2.13 ++++ php_encoding.c 10 Nov 2006 15:05:22 -0000 1.103.2.21.2.16 +@@ -1102,23 +1102,23 @@ + } + add_string_to_string(val, val, val2); + zval_ptr_dtor(&val2); +- node = node->next; ++ node = node->next; + } + } + if (any == NULL) { + any = val; + } else { + if (Z_TYPE_P(any) != IS_ARRAY) { +- /* Convert into array */ +- zval *arr; ++ /* Convert into array */ ++ zval *arr; + +- MAKE_STD_ZVAL(arr); +- array_init(arr); +- add_next_index_zval(arr, any); +- any = arr; +- } +- /* Add array element */ +- add_next_index_zval(any, val); ++ MAKE_STD_ZVAL(arr); ++ array_init(arr); ++ add_next_index_zval(arr, any); ++ any = arr; ++ } ++ /* Add array element */ ++ add_next_index_zval(any, val); + } + } + node = node->next; +@@ -1137,13 +1137,14 @@ + + if (node) { + zval *val; ++ xmlNodePtr r_node; + +- node = check_and_resolve_href(node); +- if (node && node->children && node->children->content) { +- if (model->u.element->fixed && strcmp(model->u.element->fixed, (char*)node->children->content) != 0) { +- soap_error3(E_ERROR, "Encoding: Element '%s' has fixed value '%s' (value '%s' is not allowed)", model->u.element->name, model->u.element->fixed, node->children->content); ++ r_node = check_and_resolve_href(node); ++ if (r_node && r_node->children && r_node->children->content) { ++ if (model->u.element->fixed && strcmp(model->u.element->fixed, (char*)r_node->children->content) != 0) { ++ soap_error3(E_ERROR, "Encoding: Element '%s' has fixed value '%s' (value '%s' is not allowed)", model->u.element->name, model->u.element->fixed, r_node->children->content); + } +- val = master_to_zval(model->u.element->encode, node); ++ val = master_to_zval(model->u.element->encode, r_node); + } else if (model->u.element->fixed) { + xmlNodePtr dummy = xmlNewNode(NULL, BAD_CAST("BOGUS")); + xmlNodeSetContent(dummy, BAD_CAST(model->u.element->fixed)); +@@ -1155,7 +1156,7 @@ + val = master_to_zval(model->u.element->encode, dummy); + xmlFreeNode(dummy); + } else { +- val = master_to_zval(model->u.element->encode, node); ++ val = master_to_zval(model->u.element->encode, r_node); + } + if ((node = get_node(node->next, model->u.element->name)) != NULL) { + zval *array; +@@ -1378,22 +1379,31 @@ + + prop = get_zval_property(ret, (char*)trav->name TSRMLS_CC); + if (!prop) { +- set_zval_property(ret, (char*)trav->name, tmpVal TSRMLS_CC); ++ if (!trav->next || !get_node(trav->next, (char*)trav->name)) { ++ set_zval_property(ret, (char*)trav->name, tmpVal TSRMLS_CC); ++ } else { ++ zval *arr; ++ ++ MAKE_STD_ZVAL(arr); ++ array_init(arr); ++ add_next_index_zval(arr, tmpVal); ++ set_zval_property(ret, (char*)trav->name, arr TSRMLS_CC); ++ } + } else { +- /* Property already exist - make array */ +- if (Z_TYPE_P(prop) != IS_ARRAY) { +- /* Convert into array */ +- zval *arr; +- +- MAKE_STD_ZVAL(arr); +- array_init(arr); +- prop->refcount++; +- add_next_index_zval(arr, prop); +- set_zval_property(ret, (char*)trav->name, arr TSRMLS_CC); +- prop = arr; +- } +- /* Add array element */ +- add_next_index_zval(prop, tmpVal); ++ /* Property already exist - make array */ ++ if (Z_TYPE_P(prop) != IS_ARRAY) { ++ /* Convert into array */ ++ zval *arr; ++ ++ MAKE_STD_ZVAL(arr); ++ array_init(arr); ++ prop->refcount++; ++ add_next_index_zval(arr, prop); ++ set_zval_property(ret, (char*)trav->name, arr TSRMLS_CC); ++ prop = arr; ++ } ++ /* Add array element */ ++ add_next_index_zval(prop, tmpVal); + } + } + trav = trav->next; +@@ -2013,6 +2023,7 @@ + zend_hash_find(sdl_type->attributes, SOAP_1_1_ENC_NAMESPACE":arrayType", + sizeof(SOAP_1_1_ENC_NAMESPACE":arrayType"), + (void **)&arrayType) == SUCCESS && ++ (*arrayType)->extraAttributes && + zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arrayType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&ext) == SUCCESS) { + + char *value, *end; +@@ -2061,6 +2072,7 @@ + zend_hash_find(sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":itemType", + sizeof(SOAP_1_2_ENC_NAMESPACE":itemType"), + (void **)&arrayType) == SUCCESS && ++ (*arrayType)->extraAttributes && + 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); +@@ -2071,6 +2083,7 @@ + if (zend_hash_find(sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize", + sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"), + (void **)&arrayType) == SUCCESS && ++ (*arrayType)->extraAttributes && + 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); +@@ -2091,6 +2104,7 @@ + zend_hash_find(sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize", + sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"), + (void **)&arrayType) == SUCCESS && ++ (*arrayType)->extraAttributes && + 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); +@@ -2248,6 +2262,7 @@ + zend_hash_find(type->sdl_type->attributes, SOAP_1_1_ENC_NAMESPACE":arrayType", + sizeof(SOAP_1_1_ENC_NAMESPACE":arrayType"), + (void **)&arrayType) == SUCCESS && ++ (*arrayType)->extraAttributes && + zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arrayType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&ext) == SUCCESS) { + char *type, *end; + +@@ -2269,6 +2284,7 @@ + zend_hash_find(type->sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":itemType", + sizeof(SOAP_1_2_ENC_NAMESPACE":itemType"), + (void **)&arrayType) == SUCCESS && ++ (*arrayType)->extraAttributes && + zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":itemType", sizeof(WSDL_NAMESPACE":itemType"), (void **)&ext) == SUCCESS) { + + if ((*ext)->ns != NULL) { +@@ -2278,6 +2294,7 @@ + if (zend_hash_find(type->sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize", + sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"), + (void **)&arrayType) == SUCCESS && ++ (*arrayType)->extraAttributes && + 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); +@@ -2290,6 +2307,7 @@ + zend_hash_find(type->sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize", + sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"), + (void **)&arrayType) == SUCCESS && ++ (*arrayType)->extraAttributes && + zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&ext) == SUCCESS) { + + dimension = calc_dimension_12((*ext)->val); +Index: php_http.c +=================================================================== +RCS file: /repository/php-src/ext/soap/php_http.c,v +retrieving revision 1.77.2.11.2.3 +retrieving revision 1.77.2.11.2.4 +diff -u -r1.77.2.11.2.3 -r1.77.2.11.2.4 +--- php_http.c 6 Sep 2006 11:03:45 -0000 1.77.2.11.2.3 ++++ php_http.c 28 Nov 2006 00:22:05 -0000 1.77.2.11.2.4 +@@ -469,9 +469,10 @@ + char HA1[33], HA2[33], response[33], cnonce[33], nc[9]; + PHP_MD5_CTX md5ctx; + unsigned char hash[16]; ++ unsigned int ctx; + + PHP_MD5Init(&md5ctx); +- sprintf(cnonce, "%d", rand()); ++ sprintf(cnonce, "%d", php_rand_r(&ctx)); + PHP_MD5Update(&md5ctx, (unsigned char*)cnonce, strlen(cnonce)); + PHP_MD5Final(hash, &md5ctx); + make_digest(cnonce, hash); +Index: php_packet_soap.c +=================================================================== +RCS file: /repository/php-src/ext/soap/php_packet_soap.c,v +retrieving revision 1.42.2.1.2.2 +retrieving revision 1.42.2.1.2.3 +diff -u -r1.42.2.1.2.2 -r1.42.2.1.2.3 +--- php_packet_soap.c 11 Jul 2006 14:24:18 -0000 1.42.2.1.2.2 ++++ php_packet_soap.c 6 Nov 2006 16:36:43 -0000 1.42.2.1.2.3 +@@ -350,10 +350,22 @@ + if (val != NULL) { + if (!node_is_equal_ex(val,"result",RPC_SOAP12_NAMESPACE)) { + zval *tmp; ++ zval **arr; + + tmp = master_to_zval(NULL, val); + if (val->name) { +- add_assoc_zval(return_value, (char*)val->name, tmp); ++ if (zend_hash_find(Z_ARRVAL_P(return_value), (char*)val->name, strlen((char*)val->name)+1, (void**)&arr) == SUCCESS) { ++ add_next_index_zval(*arr, tmp); ++ } else if (val->next && get_node(val->next, (char*)val->name)) { ++ zval *arr; ++ ++ MAKE_STD_ZVAL(arr); ++ array_init(arr); ++ add_next_index_zval(arr, tmp); ++ add_assoc_zval(return_value, (char*)val->name, arr); ++ } else { ++ add_assoc_zval(return_value, (char*)val->name, tmp); ++ } + } else { + add_next_index_zval(return_value, tmp); + } +Index: php_sdl.c +=================================================================== +RCS file: /repository/php-src/ext/soap/php_sdl.c,v +retrieving revision 1.88.2.12.2.3 +retrieving revision 1.88.2.12.2.4 +diff -u -r1.88.2.12.2.3 -r1.88.2.12.2.4 +--- php_sdl.c 20 Sep 2006 13:42:50 -0000 1.88.2.12.2.3 ++++ php_sdl.c 30 Nov 2006 23:51:24 -0000 1.88.2.12.2.4 +@@ -1863,7 +1863,7 @@ + sdlTypePtr *tmp; + + tmp_elements = emalloc(sizeof(HashTable)); +- zend_hash_init(tmp_elements, 0, NULL, NULL, 0); ++ zend_hash_init(tmp_elements, zend_hash_num_elements(type->elements), NULL, NULL, 0); + + zend_hash_internal_pointer_reset(type->elements); + while (zend_hash_get_current_data(type->elements, (void**)&tmp) == SUCCESS) { |