From 9b77d65bf9d6d08ec58b0769faab5cb60d059e65 Mon Sep 17 00:00:00 2001 From: Vinicius Costa Gomes Date: Wed, 20 Feb 2013 18:55:47 -0300 Subject: [PATCH] handsfree-audio: Add codec array validation This patch checks if the codec array included in the "Register" method contains valid codec ID's. --- src/handsfree-audio.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/handsfree-audio.c b/src/handsfree-audio.c index ee67f05e..499e0ded 100644 --- a/src/handsfree-audio.c +++ b/src/handsfree-audio.c @@ -32,6 +32,12 @@ #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);