Revision
14961
Author
brian
Date
2009-09-23 18:59:35 -0500 (Wed, 23 Sep 2009)

Log Message

 don't segfault 

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (14960 => 14961)


--- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c	2009-09-23 22:39:00 UTC (rev 14960)
+++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c	2009-09-23 23:59:35 UTC (rev 14961)
@@ -1533,21 +1533,33 @@
 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;
 }