]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
don't segfault
authorBrian West <brian@freeswitch.org>
Wed, 23 Sep 2009 23:59:35 +0000 (23:59 +0000)
committerBrian West <brian@freeswitch.org>
Wed, 23 Sep 2009 23:59:35 +0000 (23:59 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14961 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/applications/mod_commands/mod_commands.c

index e9f499a9872c3037f8f01e313f92708b6ed7d4f7..eee0ee82c47d4d9ac243ec0bbb362062da7d06b4 100644 (file)
@@ -1533,21 +1533,33 @@ SWITCH_STANDARD_API(kill_function)
 SWITCH_STANDARD_API(preprocess_function)
 {
        switch_core_session_t *ksession = NULL;
-       char *mycmd = NULL;
+       char *mycmd = NULL, *argv[3] = { 0 };
+       int argc = 0;
 
-       if (switch_strlen_zero(cmd)) {
-               stream->write_function(stream, "-USAGE: %s\n", KILL_SYNTAX);
-               return SWITCH_STATUS_SUCCESS;
+       if (switch_strlen_zero(cmd) || !(mycmd = strdup(cmd))) {
+               goto usage;
        }
 
-       if (!(ksession = switch_core_session_locate(cmd))) {
+       argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
+
+       if (argc < 2) {
+               goto usage;
+       }
+
+       if (!(ksession = switch_core_session_locate(argv[0]))) {
                stream->write_function(stream, "-ERR No Such Channel!\n");
+               goto done;
        } else {
-               switch_ivr_preprocess_session(session, (char *)cmd);
+               switch_ivr_preprocess_session(ksession, (char *)argv[1]);
                switch_core_session_rwunlock(ksession);
                stream->write_function(stream, "+OK\n");
+               goto done;
        }
 
+ usage:
+       stream->write_function(stream, "-USAGE: %s\n", PREPROCESS_SYNTAX);
+
+ done:
        switch_safe_free(mycmd);
        return SWITCH_STATUS_SUCCESS;
 }