summaryrefslogtreecommitdiff
path: root/ext/soap/php_sdl.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/soap/php_sdl.c')
-rw-r--r--ext/soap/php_sdl.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c
index ca71ce7ced..25022c80ea 100644
--- a/ext/soap/php_sdl.c
+++ b/ext/soap/php_sdl.c
@@ -50,21 +50,10 @@ encodePtr get_encoder_from_prefix(sdlPtr sdl, xmlNodePtr node, const char *type)
parse_namespace(type, &cptype, &ns);
nsptr = xmlSearchNs(node->doc, node, ns);
if (nsptr != NULL) {
- int ns_len = strlen(nsptr->href);
- int type_len = strlen(cptype);
- int len = ns_len + type_len + 1;
- char *nscat = emalloc(len + 1);
-
- memcpy(nscat, nsptr->href, ns_len);
- nscat[ns_len] = ':';
- memcpy(nscat+ns_len+1, cptype, type_len);
- nscat[len] = '\0';
-
- enc = get_encoder_ex(sdl, nscat, len);
+ enc = get_encoder(sdl, nsptr->href, cptype);
if (enc == NULL) {
- enc = get_encoder_ex(sdl, type, type_len);
+ enc = get_encoder_ex(sdl, cptype, strlen(cptype));
}
- efree(nscat);
} else {
enc = get_encoder_ex(sdl, type, strlen(type));
}
@@ -128,8 +117,24 @@ encodePtr get_encoder(sdlPtr sdl, const char *ns, const char *type)
nscat[len] = '\0';
enc = get_encoder_ex(sdl, nscat, len);
-
efree(nscat);
+
+ if (enc == NULL &&
+ ((ns_len == sizeof(SOAP_1_1_ENC_NAMESPACE)-1 &&
+ memcmp(ns, SOAP_1_1_ENC_NAMESPACE, sizeof(SOAP_1_1_ENC_NAMESPACE)-1) == 0) ||
+ (ns_len == sizeof(SOAP_1_2_ENC_NAMESPACE)-1 &&
+ memcmp(ns, SOAP_1_2_ENC_NAMESPACE, sizeof(SOAP_1_2_ENC_NAMESPACE)-1) == 0))) {
+ ns_len = sizeof(XSD_NAMESPACE)-1;
+ len = ns_len + type_len + 1;
+ nscat = emalloc(len + 1);
+ memcpy(nscat, XSD_NAMESPACE, sizeof(XSD_NAMESPACE)-1);
+ nscat[ns_len] = ':';
+ memcpy(nscat+ns_len+1, type, type_len);
+ nscat[len] = '\0';
+
+ enc = get_encoder_ex(sdl, nscat, len);
+ efree(nscat);
+ }
return enc;
}