[svn-commits] rmudgett: branch 10 r331576 - in /branches/10: ./ funcs/func_shell.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Aug 11 16:42:25 CDT 2011


Author: rmudgett
Date: Thu Aug 11 16:42:21 2011
New Revision: 331576

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=331576
Log:
Merged revisions 331575 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r331575 | rmudgett | 2011-08-11 16:39:58 -0500 (Thu, 11 Aug 2011) | 9 lines
  
  Segfault in shell_helper in func_shell.c.
  
  The return value of popen() was not checked for failure to open.
  
  (closes issue ASTERISK-18109)
  JIRA SWP-3633
  Reported by: Michael Myles
  Tested by: rmudgett
........

Modified:
    branches/10/   (props changed)
    branches/10/funcs/func_shell.c

Propchange: branches/10/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.

Modified: branches/10/funcs/func_shell.c
URL: http://svnview.digium.com/svn/asterisk/branches/10/funcs/func_shell.c?view=diff&rev=331576&r1=331575&r2=331576
==============================================================================
--- branches/10/funcs/func_shell.c (original)
+++ branches/10/funcs/func_shell.c Thu Aug 11 16:42:21 2011
@@ -42,29 +42,38 @@
 static int shell_helper(struct ast_channel *chan, const char *cmd, char *data,
 		                         char *buf, size_t len)
 {
+	int res = 0;
+
 	if (ast_strlen_zero(data)) {
 		ast_log(LOG_WARNING, "Missing Argument!  Example:  Set(foo=${SHELL(echo \"bar\")})\n");
 		return -1;
 	}
 
-	if (chan)
+	if (chan) {
 		ast_autoservice_start(chan);
+	}
 
 	if (len >= 1) {
 		FILE *ptr;
 		char plbuff[4096];
 
 		ptr = popen(data, "r");
-		while (fgets(plbuff, sizeof(plbuff), ptr)) {
-			strncat(buf, plbuff, len - strlen(buf) - 1);
+		if (ptr) {
+			while (fgets(plbuff, sizeof(plbuff), ptr)) {
+				strncat(buf, plbuff, len - strlen(buf) - 1);
+			}
+			pclose(ptr);
+		} else {
+			ast_log(LOG_WARNING, "Failed to execute shell command '%s'\n", data);
+			res = -1;
 		}
-		pclose(ptr);
 	}
 
-	if (chan)
+	if (chan) {
 		ast_autoservice_stop(chan);
+	}
 
-	return 0;
+	return res;
 }
 
 /*** DOCUMENTATION




More information about the svn-commits mailing list