]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix crashes resulting from reading non-existent RTP streams.
authorMark Michelson <mmichelson@digium.com>
Thu, 25 Mar 2010 17:05:40 +0000 (17:05 +0000)
committerMark Michelson <mmichelson@digium.com>
Thu, 25 Mar 2010 17:05:40 +0000 (17:05 +0000)
Specifically, when using the CHANNEL dialplan function, it was
possible to crash Asterisk by trying to get the rtpdest of a
stream type that is not in use by the channel. This commit
fixes that issue.

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

channels/chan_sip.c

index 9878a2c31c11fc0edc37838c616cf2975539f2a0..c1f438fa5cf80e4b535cc04db186e227c9fb636e 100644 (file)
@@ -19064,17 +19064,24 @@ static int acf_channel_read(struct ast_channel *chan, const char *funcname, char
 
        if (!strcasecmp(args.param, "rtpdest")) {
                struct sockaddr_in sin;
+               struct ast_rtp *stream;
 
                if (ast_strlen_zero(args.type))
                        args.type = "audio";
 
-               if (!strcasecmp(args.type, "audio"))
-                       ast_rtp_get_peer(p->rtp, &sin);
-               else if (!strcasecmp(args.type, "video"))
-                       ast_rtp_get_peer(p->vrtp, &sin);
-               else if (!strcasecmp(args.type, "text"))
-                       ast_rtp_get_peer(p->trtp, &sin);
+               if (!strcasecmp(args.type, "audio")) {
+                       stream = p->rtp;
+               } else if (!strcasecmp(args.type, "video")) {
+                       stream = p->vrtp;
+               } else if (!strcasecmp(args.type, "text")) {
+                       stream = p->trtp;
+               }
+
+               if (!stream) {
+                       return -1;
+               }
 
+               ast_rtp_get_peer(stream, &sin);
                snprintf(buf, buflen, "%s:%d", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port));
        } else if (!strcasecmp(args.param, "rtpqos")) {
                struct ast_rtp_quality qos;