]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_stasis_snoop.c: Fix off nominial exit path leaving Snoop channel locked and not...
authorRichard Mudgett <rmudgett@digium.com>
Tue, 12 Aug 2014 23:33:00 +0000 (23:33 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 12 Aug 2014 23:33:00 +0000 (23:33 +0000)
* Made use ast_copy_string() instead of strcpy() for snoop uniqueid for
safety.  There is no guarantee that the max channel uniqueid length will
remain the same as the snoop uniqueid space.

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

res/res_stasis_snoop.c

index 72f8519230670ecee4abba5b2fe466ea5db2e9cd..16d47f8ba7a53f63fd1a2c887fa2dd003bfedf77 100644 (file)
@@ -333,7 +333,7 @@ struct ast_channel *stasis_app_control_snoop(struct ast_channel *chan,
                return NULL;
        }
 
-       strcpy(snoop->uniqueid, ast_channel_uniqueid(chan));
+       ast_copy_string(snoop->uniqueid, ast_channel_uniqueid(chan), sizeof(snoop->uniqueid));
 
        /* To keep the channel valid on the Snoop structure until it is destroyed we bump the ref up here */
        ast_channel_ref(snoop->chan);
@@ -346,6 +346,8 @@ struct ast_channel *stasis_app_control_snoop(struct ast_channel *chan,
        /* The format on the Snoop channel will be this signed linear format, and it will never change */
        caps = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT);
        if (!caps) {
+               ast_channel_unlock(snoop->chan);
+               ast_hangup(snoop->chan);
                return NULL;
        }
        ast_format_cap_append(caps, snoop->spy_format, 0);