handsfree-audio: Add codec array validation
authorVinicius Costa Gomes <vinicius.gomes@openbossa.org>
Wed, 20 Feb 2013 21:55:47 +0000 (18:55 -0300)
committerDenis Kenzior <denkenz@gmail.com>
Thu, 21 Feb 2013 03:22:45 +0000 (21:22 -0600)
This patch checks if the codec array included in the "Register" method
contains valid codec ID's.

src/handsfree-audio.c

index ee67f05..499e0de 100644 (file)
 
 #define HFP_AUDIO_MANAGER_INTERFACE            OFONO_SERVICE ".HandsfreeAudioManager"
 
+/* Supported agent codecs */
+enum hfp_codec {
+       HFP_CODEC_CVSD = 0x01,
+       HFP_CODEC_MSBC = 0x02,
+};
+
 struct agent {
        char *owner;
        char *path;
@@ -53,7 +59,7 @@ static DBusMessage *am_agent_register(DBusConnection *conn,
        const char *sender, *path;
        unsigned char *codecs;
        DBusMessageIter iter, array;
-       int length;
+       int length, i;
 
        if (agent)
                return __ofono_error_in_use(msg);
@@ -72,6 +78,12 @@ static DBusMessage *am_agent_register(DBusConnection *conn,
        if (length == 0)
                return __ofono_error_invalid_args(msg);
 
+       for (i = 0; i < length; i++) {
+               if (codecs[i] != HFP_CODEC_CVSD &&
+                               codecs[i] != HFP_CODEC_MSBC)
+                       return __ofono_error_invalid_args(msg);
+       }
+
        agent = g_new0(struct agent, 1);
        agent->owner = g_strdup(sender);
        agent->path = g_strdup(path);