Remove access to free'd memory fro dude's code
[asterisk/asterisk.git] / apps / app_dial.c
index eff1214..e64a81c 100755 (executable)
@@ -83,7 +83,6 @@ struct localuser {
        int ringbackonly;
        int musiconhold;
        int dataquality;
-       int clearchannel;
        int allowdisconnect;
        struct localuser *next;
 };
@@ -299,6 +298,7 @@ static int dial_exec(struct ast_channel *chan, void *data)
        int allowdisconnect=0;
        int privacy=0;
        int resetcdr=0;
+       int clearchannel=0;
        char numsubst[AST_MAX_EXTENSION];
        char restofit[AST_MAX_EXTENSION];
        char *transfer = NULL;
@@ -430,8 +430,9 @@ static int dial_exec(struct ast_channel *chan, void *data)
                                tmp->allowdisconnect = 1;
                         else    tmp->allowdisconnect = 0;
                        if (strchr(transfer, 'c'))
-                               tmp->clearchannel = 1;
-                        else    tmp->clearchannel = 0;
+                               clearchannel = 1;
+            else    
+                               clearchannel = 0;
                }
                strncpy(numsubst, number, sizeof(numsubst)-1);
                /* If we're dialing by extension, look at the extension to know what to dial */
@@ -548,13 +549,13 @@ static int dial_exec(struct ast_channel *chan, void *data)
                if (!strcmp(chan->type,"Zap"))
                {
                        int x = 2;
-                       if (tmp->dataquality || tmp->clearchannel) x = 0;
+                       if (tmp->dataquality || clearchannel) x = 0;
                        ast_channel_setoption(chan,AST_OPTION_TONE_VERIFY,&x,sizeof(char),0);
                }                       
                if (!strcmp(peer->type,"Zap"))
                {
                        int x = 2;
-                       if (tmp->dataquality || tmp->clearchannel) x = 0;
+                       if (tmp->dataquality || clearchannel) x = 0;
                        ast_channel_setoption(peer,AST_OPTION_TONE_VERIFY,&x,sizeof(char),0);
                }                       
                hanguptree(outgoing, peer);
@@ -578,14 +579,14 @@ static int dial_exec(struct ast_channel *chan, void *data)
                        ast_log(LOG_DEBUG, "app_dial: sendurl=%s.\n", url);
                        ast_channel_sendurl( peer, url );
                } /* /JDG */
-               if (tmp->clearchannel)
+               if (clearchannel)
                {
                        int x = 0;
                        ast_channel_setoption(chan,AST_OPTION_AUDIO_MODE,&x,sizeof(char),0);
                        ast_channel_setoption(peer,AST_OPTION_AUDIO_MODE,&x,sizeof(char),0);
                }
                res = ast_bridge_call(chan, peer, allowredir, allowdisconnect | tmp->clearchannel);
-               if (tmp->clearchannel)
+               if (clearchannel)
                {
                        int x = 1;
                        ast_channel_setoption(chan,AST_OPTION_AUDIO_MODE,&x,sizeof(char),0);