diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-05-20 02:31:30 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-05-20 02:31:30 +0000 |
commit | dbe06afe0a5791dafe565da85bb20098ff3a83bf (patch) | |
tree | 58b70ca5a73983c3a8e8545a4b39b3b536ad77ab /apps | |
parent | 782c18e18ad29d7f6bb6db53b622f79397e9cccd (diff) |
fix a case where code made assumptions about how memory for variables is
allocatted on the stack - this patch is slightly different than the one
that went in for the trunk
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2@28966 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rw-r--r-- | apps/app_sms.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/apps/app_sms.c b/apps/app_sms.c index 4c15cc185..beaf4e2a1 100644 --- a/apps/app_sms.c +++ b/apps/app_sms.c @@ -1178,25 +1178,24 @@ static void sms_messagetx(sms_t * h) static int sms_generate (struct ast_channel *chan, void *data, int len, int samples) { struct ast_frame f = { 0 }; - unsigned char waste[AST_FRIENDLY_OFFSET]; +#define MAXSAMPLES 800 #ifdef OUTALAW - unsigned char buf[800]; + unsigned char *buf; #else - signed short buf[800]; + short *buf; #endif +#define SAMPLE2LEN sizeof(*buf) sms_t *h = data; int i; - if (len > sizeof (buf)) { - ast_log (LOG_WARNING, "Only doing %d bytes (%d bytes requested)\n", (int)(sizeof (buf) / sizeof (signed short)), len); - len = sizeof (buf); -#ifdef OUTALAW - samples = len; -#else - samples = len / 2; -#endif + if (samples > MAXSAMPLES) { + ast_log (LOG_WARNING, "Only doing %d samples (%d requested)\n", + MAXSAMPLES, samples); + samples = MAXSAMPLES; } - waste[0] = 0; /* make compiler happy */ + len = samples * SAMPLE2LEN + AST_FRIENDLY_OFFSET; + buf = alloca(len); + f.frametype = AST_FRAME_VOICE; #ifdef OUTALAW f.subclass = AST_FORMAT_ALAW; @@ -1206,8 +1205,7 @@ static int sms_generate (struct ast_channel *chan, void *data, int len, int samp f.datalen = samples * 2; #endif f.offset = AST_FRIENDLY_OFFSET; - f.mallocd = 0; - f.data = buf; + f.data = buf + AST_FRIENDLY_OFFSET; f.samples = samples; f.src = "app_sms"; /* create a buffer containing the digital sms pattern */ |