[telepathy-gabble/master] Only accept actions which exist in the dialect

Will Thompson will.thompson at collabora.co.uk
Tue Jun 23 09:46:06 PDT 2009


---
 src/jingle-session.c |   18 +++++++++++++-----
 1 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/jingle-session.c b/src/jingle-session.c
index e654e8d..d625f2b 100644
--- a/src/jingle-session.c
+++ b/src/jingle-session.c
@@ -1518,7 +1518,7 @@ gabble_jingle_session_parse (GabbleJingleSession *sess, JingleAction action, LmM
   TpHandleRepoIface *contact_repo;
   GabbleJingleSessionPrivate *priv = sess->priv;
   LmMessageNode *iq_node, *session_node;
-  const gchar *from;
+  const gchar *from, *action_name;
 
   iq_node = lm_message_get_node (message);
 
@@ -1531,9 +1531,10 @@ gabble_jingle_session_parse (GabbleJingleSession *sess, JingleAction action, LmM
       return FALSE;
     }
 
+  action_name = produce_action (action, priv->dialect);
+
   DEBUG ("jingle action '%s' from '%s' in session '%s' dialect %u state %u",
-      produce_action (action, priv->dialect), from, priv->sid,
-      priv->dialect, priv->state);
+      action_name, from, priv->sid, priv->dialect, priv->state);
 
   switch (priv->dialect) {
     case JINGLE_DIALECT_V032:
@@ -1563,10 +1564,17 @@ gabble_jingle_session_parse (GabbleJingleSession *sess, JingleAction action, LmM
   contact_repo = tp_base_connection_get_handles (
       (TpBaseConnection *) priv->conn, TP_HANDLE_TYPE_CONTACT);
 
+  if (!dialect_defines_action (priv->dialect, action))
+    {
+      g_set_error (error, GABBLE_XMPP_ERROR, XMPP_ERROR_BAD_REQUEST,
+          "action '%s' unknown (using dialect %u)", action_name, priv->dialect);
+      return FALSE;
+    }
+
   if (!action_is_allowed (action, priv->state))
     {
-      SET_OUT_ORDER ("action \"%s\" not allowed in current state",
-          produce_action (action, priv->dialect));
+      g_set_error (error, GABBLE_XMPP_ERROR, XMPP_ERROR_JINGLE_OUT_OF_ORDER,
+          "action '%s' not allowed in current state", action_name);
       return FALSE;
     }
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list