Don't crash when invalid arguments are provided to the CHANNEL() function
authorRussell Bryant <russell@russellbryant.com>
Mon, 30 Apr 2007 15:37:23 +0000 (15:37 +0000)
committerRussell Bryant <russell@russellbryant.com>
Mon, 30 Apr 2007 15:37:23 +0000 (15:37 +0000)
for a SIP channel.
(issue #9619, reported by jtodd, original patch by Corydon76, committed patch
 slightly modified by me)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@62416 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 4c6243a..cdff589 100644 (file)
@@ -14911,12 +14911,15 @@ static int acf_channel_read(struct ast_channel *chan, const char *funcname, char
                return 0;
        }
 
-       if (strcasecmp(args.param, "rtpqos"))
-               return 0;
+       if (ast_strlen_zero(args.param) || strcasecmp(args.param, "rtpqos"))
+               return -1;
 
        memset(buf, 0, buflen);
        memset(&qos, 0, sizeof(qos));
 
+       if (ast_strlen_zero(args.type))
+               return -1;
+
        if (strcasecmp(args.type, "AUDIO") == 0) {
                all = ast_rtp_get_quality(p->rtp, &qos);
        } else if (strcasecmp(args.type, "VIDEO") == 0) {
@@ -14925,6 +14928,9 @@ static int acf_channel_read(struct ast_channel *chan, const char *funcname, char
                all = ast_rtp_get_quality(p->trtp, &qos);
        }
 
+       if (ast_strlen_zero(args.field))
+               return -1;
+
        if (strcasecmp(args.field, "local_ssrc") == 0)
                snprintf(buf, buflen, "%u", qos.local_ssrc);
        else if (strcasecmp(args.field, "local_lostpackets") == 0)