fix up another place where the code made assumptions about how space for
authorRussell Bryant <russell@russellbryant.com>
Sat, 20 May 2006 01:28:14 +0000 (01:28 +0000)
committerRussell Bryant <russell@russellbryant.com>
Sat, 20 May 2006 01:28:14 +0000 (01:28 +0000)
variables would be allocatted on the stack

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@28934 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_sms.c

index c3488b9..105bbe3 100644 (file)
@@ -1176,14 +1176,13 @@ 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[MAXSAMPLES];
+       unsigned char *buf;
 #else
-       signed short buf[MAXSAMPLES];
+       short *buf;
 #endif
-#define SAMPLE2LEN (sizeof (buf[0]))
+#define SAMPLE2LEN sizeof(*buf)
        sms_t *h = data;
        int i;
 
@@ -1192,9 +1191,9 @@ static int sms_generate (struct ast_channel *chan, void *data, int len, int samp
                         MAXSAMPLES, samples);
                samples = MAXSAMPLES;
        }
-       len = samples * SAMPLE2LEN;
+       len = samples * SAMPLE2LEN + AST_FRIENDLY_OFFSET;
+       buf = alloca(len);
 
-       waste[0] = 0;                            /* make compiler happy */
        f.frametype = AST_FRAME_VOICE;
 #ifdef OUTALAW
        f.subclass = AST_FORMAT_ALAW;
@@ -1204,7 +1203,7 @@ static int sms_generate (struct ast_channel *chan, void *data, int len, int samp
        f.datalen = len;
        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 */