[asterisk-commits] mnicholson: trunk r335654 - in /trunk: ./ main/manager.c main/pbx.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Sep 13 13:49:30 CDT 2011


Author: mnicholson
Date: Tue Sep 13 13:49:26 2011
New Revision: 335654

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

................
  r335653 | mnicholson | 2011-09-13 13:47:57 -0500 (Tue, 13 Sep 2011) | 12 lines
  
  Merged revisions 335618 via svnmerge from 
  https://origsvn.digium.com/svn/asterisk/branches/1.8
  
  ........
    r335618 | mnicholson | 2011-09-13 13:20:52 -0500 (Tue, 13 Sep 2011) | 5 lines
    
    Don't limit the size of appdata for manager originate actions.
    
    ASTERISK-17709
    Patch by: tilghman (with modifications)
  ........
................

Modified:
    trunk/   (props changed)
    trunk/main/manager.c
    trunk/main/pbx.c

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

Modified: trunk/main/manager.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/manager.c?view=diff&rev=335654&r1=335653&r2=335654
==============================================================================
--- trunk/main/manager.c (original)
+++ trunk/main/manager.c Tue Sep 13 13:49:26 2011
@@ -81,6 +81,7 @@
 #include "asterisk/features.h"
 #include "asterisk/security_events.h"
 #include "asterisk/aoc.h"
+#include "asterisk/stringfields.h"
 
 /*** DOCUMENTATION
 	<manager name="Ping" language="en_US">
@@ -3604,14 +3605,16 @@
 	char data[512];
 	int timeout;
 	struct ast_format_cap *cap;				/*!< Codecs used for a call */
-	char app[AST_MAX_APP];
-	char appdata[AST_MAX_EXTENSION];
-	char cid_name[AST_MAX_EXTENSION];
-	char cid_num[AST_MAX_EXTENSION];
-	char context[AST_MAX_CONTEXT];
-	char exten[AST_MAX_EXTENSION];
-	char idtext[AST_MAX_EXTENSION];
-	char account[AST_MAX_ACCOUNT_CODE];
+	AST_DECLARE_STRING_FIELDS (
+		AST_STRING_FIELD(app);
+		AST_STRING_FIELD(appdata);
+		AST_STRING_FIELD(cid_name);
+		AST_STRING_FIELD(cid_num);
+		AST_STRING_FIELD(context);
+		AST_STRING_FIELD(exten);
+		AST_STRING_FIELD(idtext);
+		AST_STRING_FIELD(account);
+	);
 	int priority;
 	struct ast_variable *vars;
 };
@@ -3663,6 +3666,7 @@
 		ast_channel_unlock(chan);
 	}
 	in->cap = ast_format_cap_destroy(in->cap);
+	ast_string_field_free_memory(in);
 	ast_free(in);
 	return NULL;
 }
@@ -3998,31 +4002,32 @@
 
 	if (ast_true(async)) {
 		struct fast_originate_helper *fast = ast_calloc(1, sizeof(*fast));
-		if (!fast) {
+		if (!fast || ast_string_field_init(fast, 252)) {
+			if (fast) {
+				ast_free(fast);
+			}
 			res = -1;
 		} else {
-			if (!ast_strlen_zero(id))
-				snprintf(fast->idtext, sizeof(fast->idtext), "ActionID: %s", id);
-			ast_copy_string(fast->tech, tech, sizeof(fast->tech));
-			ast_copy_string(fast->data, data, sizeof(fast->data));
-			ast_copy_string(fast->app, app, sizeof(fast->app));
-			ast_copy_string(fast->appdata, appdata, sizeof(fast->appdata));
-			if (l) {
-				ast_copy_string(fast->cid_num, l, sizeof(fast->cid_num));
-			}
-			if (n) {
-				ast_copy_string(fast->cid_name, n, sizeof(fast->cid_name));
-			}
+			if (!ast_strlen_zero(id)) {
+				ast_string_field_build(fast, idtext, "ActionID: %s", id);
+			}
+			ast_string_field_set(fast, tech, tech);
+			ast_string_field_set(fast, data, data);
+			ast_string_field_set(fast, app, app);
+			ast_string_field_set(fast, appdata, appdata);
+			ast_string_field_set(fast, cid_num, l);
+			ast_string_field_set(fast, cid_name, n);
+			ast_string_field_set(fast, context, context);
+			ast_string_field_set(fast, exten, exten);
+			ast_string_field_set(fast, account, account);
 			fast->vars = vars;
-			ast_copy_string(fast->context, context, sizeof(fast->context));
-			ast_copy_string(fast->exten, exten, sizeof(fast->exten));
-			ast_copy_string(fast->account, account, sizeof(fast->account));
 			fast->cap = cap;
 			cap = NULL; /* transfered originate helper the capabilities structure.  It is now responsible for freeing it. */
 			fast->timeout = to;
 			fast->priority = pi;
 			if (ast_pthread_create_detached(&th, NULL, fast_originate, fast)) {
 				ast_format_cap_destroy(fast->cap);
+				ast_string_field_free_memory(fast);
 				ast_free(fast);
 				res = -1;
 			} else {

Modified: trunk/main/pbx.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/pbx.c?view=diff&rev=335654&r1=335653&r2=335654
==============================================================================
--- trunk/main/pbx.c (original)
+++ trunk/main/pbx.c Tue Sep 13 13:49:26 2011
@@ -8905,10 +8905,12 @@
 }
 
 struct app_tmp {
-	char app[256];
-	char data[256];
 	struct ast_channel *chan;
 	pthread_t t;
+	AST_DECLARE_STRING_FIELDS (
+		AST_STRING_FIELD(app);
+		AST_STRING_FIELD(data);
+	);
 };
 
 /*! \brief run the application and free the descriptor once done */
@@ -8923,6 +8925,7 @@
 	} else
 		ast_log(LOG_WARNING, "No such application '%s'\n", tmp->app);
 	ast_hangup(tmp->chan);
+	ast_string_field_free_memory(tmp);
 	ast_free(tmp);
 	return NULL;
 }
@@ -8954,12 +8957,14 @@
 				res = 0;
 				ast_verb(4, "Channel %s was answered.\n", chan->name);
 				tmp = ast_calloc(1, sizeof(*tmp));
-				if (!tmp)
+				if (!tmp || ast_string_field_init(tmp, 252)) {
+					if (tmp) {
+						ast_free(tmp);
+					}
 					res = -1;
-				else {
-					ast_copy_string(tmp->app, app, sizeof(tmp->app));
-					if (appdata)
-						ast_copy_string(tmp->data, appdata, sizeof(tmp->data));
+				} else {
+					ast_string_field_set(tmp, app, app);
+					ast_string_field_set(tmp, data, appdata);
 					tmp->chan = chan;
 					if (synchronous > 1) {
 						if (locked_channel)
@@ -8970,6 +8975,7 @@
 							ast_channel_lock(chan);
 						if (ast_pthread_create_detached(&tmp->t, NULL, ast_pbx_run_app, tmp)) {
 							ast_log(LOG_WARNING, "Unable to spawn execute thread on %s: %s\n", chan->name, strerror(errno));
+							ast_string_field_free_memory(tmp);
 							ast_free(tmp);
 							if (locked_channel)
 								ast_channel_unlock(chan);




More information about the asterisk-commits mailing list