[asterisk-commits] mnicholson: branch 1.8 r335618 - in /branches/1.8/main: manager.c pbx.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Sep 13 13:20:57 CDT 2011
Author: mnicholson
Date: Tue Sep 13 13:20:52 2011
New Revision: 335618
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=335618
Log:
Don't limit the size of appdata for manager originate actions.
ASTERISK-17709
Patch by: tilghman (with modifications)
Modified:
branches/1.8/main/manager.c
branches/1.8/main/pbx.c
Modified: branches/1.8/main/manager.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/main/manager.c?view=diff&rev=335618&r1=335617&r2=335618
==============================================================================
--- branches/1.8/main/manager.c (original)
+++ branches/1.8/main/manager.c Tue Sep 13 13:20:52 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">
@@ -3559,14 +3560,16 @@
char data[512];
int timeout;
format_t format; /*!< 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;
};
@@ -3617,6 +3620,7 @@
if (chan) {
ast_channel_unlock(chan);
}
+ ast_string_field_free_memory(in);
ast_free(in);
return NULL;
}
@@ -3939,29 +3943,30 @@
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->format = format;
fast->timeout = to;
fast->priority = pi;
if (ast_pthread_create_detached(&th, NULL, fast_originate, fast)) {
+ ast_string_field_free_memory(fast);
ast_free(fast);
res = -1;
} else {
Modified: branches/1.8/main/pbx.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/main/pbx.c?view=diff&rev=335618&r1=335617&r2=335618
==============================================================================
--- branches/1.8/main/pbx.c (original)
+++ branches/1.8/main/pbx.c Tue Sep 13 13:20:52 2011
@@ -8738,10 +8738,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 */
@@ -8756,6 +8758,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;
}
@@ -8787,12 +8790,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)
@@ -8803,6 +8808,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