summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kellner <gicmo@gnome.org>2012-06-18 13:31:46 +0200
committerChristian Kellner <gicmo@gnome.org>2012-06-18 13:31:46 +0200
commitc12296f716102e83647d67017d418129c9cc22c7 (patch)
tree7c0ee017d45a535098c20b74921e7b686ee7a98d
parent042f06197ca72b4703116fc3fe29da7c4a7df352 (diff)
downloadgvfs-c12296f716102e83647d67017d418129c9cc22c7.tar.gz
dav: ignore empty tags in multistatus responses
The old logic in ms_response_to_file_info () assumed that all the tags that were present in the 200 status block of the multistatus response actually contain data. Of course some server will violate this assumption. We now make sure that tags really have content when parsing. Should fix bug 675506.
-rw-r--r--daemon/gvfsbackenddav.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/daemon/gvfsbackenddav.c b/daemon/gvfsbackenddav.c
index 4f1d8e09..8f9eeb54 100644
--- a/daemon/gvfsbackenddav.c
+++ b/daemon/gvfsbackenddav.c
@@ -581,6 +581,18 @@ node_get_content (xmlNodePtr node)
}
}
+static gboolean
+node_is_empty (xmlNodePtr node)
+{
+ if (node == NULL)
+ return TRUE;
+
+ if (node->type == XML_TEXT_NODE)
+ return node->content == NULL || node->content[0] == '\0';
+
+ return node->children == NULL;
+}
+
typedef struct _xmlNodeIter {
xmlNodePtr cur_node;
@@ -998,7 +1010,7 @@ ms_response_to_file_info (MsResponse *response,
for (node = propstat.prop_node->children; node; node = node->next)
{
- if (! node_is_element (node))
+ if (! node_is_element (node) || node_is_empty (node))
continue; /* TODO: check namespace, parse user data nodes*/
text = node_get_content (node);