text = xmlNewText(BAD_CAST(str_val));
xmlAddChild(dummy, text);
ZVAL_NULL(&data);
- master_to_zval(&data, attr->encode, dummy);
+ /* TODO: There are other places using dummy nodes -- generalize? */
+ zend_try {
+ master_to_zval(&data, attr->encode, dummy);
+ } zend_catch {
+ xmlFreeNode(dummy);
+ zend_bailout();
+ } zend_end_try();
xmlFreeNode(dummy);
set_zval_property(ret, attr->name, &data);
}
zend_hash_init(&ctx.portTypes, 0, NULL, NULL, 0);
zend_hash_init(&ctx.services, 0, NULL, NULL, 0);
- load_wsdl_ex(this_ptr, struri,&ctx, 0);
+ load_wsdl_ex(this_ptr, struri, &ctx, 0);
+ zend_try {
+
schema_pass2(&ctx);
n = zend_hash_num_elements(&ctx.services);
soap_error0(E_ERROR, "Parsing WSDL: Could not find any usable binding services in WSDL.");
}
+ } zend_catch {
+ /* Avoid persistent memory leak. */
+ zend_hash_destroy(&ctx.docs);
+ zend_bailout();
+ } zend_end_try();
+
zend_hash_destroy(&ctx.messages);
zend_hash_destroy(&ctx.bindings);
zend_hash_destroy(&ctx.portTypes);
old_features = SOAP_GLOBAL(features);
SOAP_GLOBAL(features) = service->features;
old_soap_version = SOAP_GLOBAL(soap_version);
- function = deserialize_function_call(service->sdl, doc_request, service->actor, &function_name, &num_params, ¶ms, &soap_version, &soap_headers);
+
+ zend_try {
+ function = deserialize_function_call(service->sdl, doc_request, service->actor, &function_name, &num_params, ¶ms, &soap_version, &soap_headers);
+ } zend_catch {
+ /* Avoid leaking persistent memory */
+ xmlFreeDoc(doc_request);
+ zend_bailout();
+ } zend_end_try();
+
xmlFreeDoc(doc_request);
if (EG(exception)) {
encode_reset_ns();
doc = xmlNewDoc(BAD_CAST("1.0"));
+ zend_try {
+
doc->charset = XML_CHAR_ENCODING_UTF8;
doc->encoding = xmlCharStrdup("UTF-8");
encode_finish();
+ } zend_catch {
+ /* Avoid persistent memory leak. */
+ xmlFreeDoc(doc);
+ zend_bailout();
+ } zend_end_try();
+
if (function && function->responseName == NULL &&
body->children == NULL && head == NULL) {
xmlFreeDoc(doc);
encode_reset_ns();
doc = xmlNewDoc(BAD_CAST("1.0"));
+ zend_try {
+
doc->encoding = xmlCharStrdup("UTF-8");
doc->charset = XML_CHAR_ENCODING_UTF8;
if (version == SOAP_1_1) {
}
} else {
if ((zstyle = zend_hash_str_find(Z_OBJPROP_P(this_ptr), "style", sizeof("style")-1)) != NULL &&
- Z_TYPE_P(zstyle) == IS_LONG) {
+ Z_TYPE_P(zstyle) == IS_LONG) {
style = Z_LVAL_P(zstyle);
} else {
style = SOAP_RPC;
}
if ((zuse = zend_hash_str_find(Z_OBJPROP_P(this_ptr), "use", sizeof("use")-1)) != NULL &&
- Z_TYPE_P(zuse) == IS_LONG && Z_LVAL_P(zuse) == SOAP_LITERAL) {
+ Z_TYPE_P(zuse) == IS_LONG && Z_LVAL_P(zuse) == SOAP_LITERAL) {
use = SOAP_LITERAL;
} else {
use = SOAP_ENCODED;
ht = Z_OBJPROP_P(header);
if ((name = zend_hash_str_find(ht, "name", sizeof("name")-1)) != NULL &&
- Z_TYPE_P(name) == IS_STRING &&
- (ns = zend_hash_str_find(ht, "namespace", sizeof("namespace")-1)) != NULL &&
- Z_TYPE_P(ns) == IS_STRING) {
+ Z_TYPE_P(name) == IS_STRING &&
+ (ns = zend_hash_str_find(ht, "namespace", sizeof("namespace")-1)) != NULL &&
+ Z_TYPE_P(ns) == IS_STRING) {
xmlNodePtr h;
xmlNsPtr nsptr;
int hdr_use = SOAP_LITERAL;
encode_finish();
+ } zend_catch {
+ /* Avoid persistent memory leak. */
+ xmlFreeDoc(doc);
+ zend_bailout();
+ } zend_end_try();
+
return doc;
}
/* }}} */