[telepathy-gabble/telepathy-gabble-0.8] gabble_decode_jid(): return FALSE if JID components are wrongly empty
Dafydd Harries
dafydd.harries at collabora.co.uk
Tue Aug 25 10:05:25 PDT 2009
The domain must always be non-empty. The node must not be empty if there is an
'@', and the resource must not be empty if there is a '/'.
---
src/util.c | 13 ++++++++++++-
tests/test-jid-decode.c | 38 ++++++++++++++++++++++++++++++++++++--
2 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/src/util.c b/src/util.c
index 685739e..9d8135c 100644
--- a/src/util.c
+++ b/src/util.c
@@ -474,9 +474,20 @@ gabble_decode_jid (const gchar *jid,
tmp_resource++;
}
+ /* Domain must be non-empty. If the node or the resource exist, they must be
+ * non-empty.
+ */
+ if (*tmp_domain == '\0' ||
+ (tmp_node != NULL && *tmp_node == '\0') ||
+ (tmp_resource != NULL && *tmp_resource == '\0'))
+ {
+ g_free (tmp_jid);
+ return FALSE;
+ }
+
/* the server must be stored after we find the resource, in case we
* truncated a resource from it */
- if (tmp_domain != NULL && domain != NULL)
+ if (domain != NULL)
*domain = g_utf8_strdown (tmp_domain, -1);
/* store the username if the user provided a pointer */
diff --git a/tests/test-jid-decode.c b/tests/test-jid-decode.c
index bc780dd..6fefeec 100644
--- a/tests/test-jid-decode.c
+++ b/tests/test-jid-decode.c
@@ -12,9 +12,9 @@ test1 (void)
gchar *server = NULL;
gchar *resource = NULL;
- g_assert (gabble_decode_jid ("", &node, &server, &resource));
+ g_assert (!gabble_decode_jid ("", &node, &server, &resource));
g_assert (node == NULL);
- g_assert (0 == strcmp (server, ""));
+ g_assert (server == NULL);
g_assert (resource == NULL);
g_free (server);
}
@@ -64,6 +64,38 @@ test4 (void)
g_free (resource);
}
+static void
+test5 (void)
+{
+ gchar *node = NULL;
+ gchar *server = NULL;
+ gchar *resource = NULL;
+
+ g_assert (!gabble_decode_jid ("@bar", &node, &server, &resource));
+ g_assert (node == NULL);
+ g_assert (server == NULL);
+ g_assert (resource == NULL);
+ g_free (node);
+ g_free (server);
+ g_free (resource);
+}
+
+static void
+test6 (void)
+{
+ gchar *node = NULL;
+ gchar *server = NULL;
+ gchar *resource = NULL;
+
+ g_assert (!gabble_decode_jid ("foo at bar/", &node, &server, &resource));
+ g_assert (node == NULL);
+ g_assert (server == NULL);
+ g_assert (resource == NULL);
+ g_free (node);
+ g_free (server);
+ g_free (resource);
+}
+
int
main (void)
{
@@ -71,6 +103,8 @@ main (void)
test2 ();
test3 ();
test4 ();
+ test5 ();
+ test6 ();
return 0;
}
--
1.5.6.5
More information about the telepathy-commits
mailing list