summaryrefslogtreecommitdiff
path: root/libsoup/soup-xmlrpc.c
diff options
context:
space:
mode:
Diffstat (limited to 'libsoup/soup-xmlrpc.c')
-rw-r--r--libsoup/soup-xmlrpc.c38
1 files changed, 23 insertions, 15 deletions
diff --git a/libsoup/soup-xmlrpc.c b/libsoup/soup-xmlrpc.c
index f7908585..e2890100 100644
--- a/libsoup/soup-xmlrpc.c
+++ b/libsoup/soup-xmlrpc.c
@@ -290,6 +290,11 @@ soup_xmlrpc_build_method_response (GValue *value)
}
static char *
+soup_xmlrpc_build_faultv (int fault_code,
+ const char *fault_format,
+ va_list args) G_GNUC_PRINTF (2, 0);
+
+static char *
soup_xmlrpc_build_faultv (int fault_code, const char *fault_format, va_list args)
{
xmlDoc *doc;
@@ -593,29 +598,32 @@ soup_xmlrpc_parse_method_call (const char *method_call, int length,
xmlMethodName = xmlNodeGetContent (node);
node = find_real_node (node->next);
- if (!node || strcmp ((const char *)node->name, "params") != 0)
- goto fail;
+ if (node) {
+ if (strcmp ((const char *)node->name, "params") != 0)
+ goto fail;
#ifdef G_GNUC_BEGIN_IGNORE_DEPRECATIONS
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
#endif
- *params = g_value_array_new (1);
- param = find_real_node (node->children);
- while (param && !strcmp ((const char *)param->name, "param")) {
- xval = find_real_node (param->children);
- if (!xval || strcmp ((const char *)xval->name, "value") != 0 ||
- !parse_value (xval, &value)) {
- g_value_array_free (*params);
- goto fail;
- }
- g_value_array_append (*params, &value);
- g_value_unset (&value);
+ *params = soup_value_array_new ();
+ param = find_real_node (node->children);
+ while (param && !strcmp ((const char *)param->name, "param")) {
+ xval = find_real_node (param->children);
+ if (!xval || strcmp ((const char *)xval->name, "value") != 0 ||
+ !parse_value (xval, &value)) {
+ g_value_array_free (*params);
+ goto fail;
+ }
+ g_value_array_append (*params, &value);
+ g_value_unset (&value);
- param = find_real_node (param->next);
- }
+ param = find_real_node (param->next);
+ }
#ifdef G_GNUC_END_IGNORE_DEPRECATIONS
G_GNUC_END_IGNORE_DEPRECATIONS
#endif
+ } else
+ *params = soup_value_array_new ();
success = TRUE;
*method_name = g_strdup ((char *)xmlMethodName);