]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
fixes segfault in iLBC
authorDavid Vossel <dvossel@digium.com>
Fri, 6 Nov 2009 17:07:13 +0000 (17:07 +0000)
committerDavid Vossel <dvossel@digium.com>
Fri, 6 Nov 2009 17:07:13 +0000 (17:07 +0000)
For reasons not yet known, it appears possible for an ast_frame
to have a datalen greater than zero while the actual data is NULL
during Packet Loss Concealment.  Most codecs don't support PLC so
this doesn't affect them.  This patch catches the malformed frame
and prevents the crash from occuring.  Additional efforts to determine
why it is possible for a frame to look like this are still being
investigated.

(issue #16979)

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

codecs/codec_ilbc.c

index b5fc9bf32c6e9d235ed14ac2afff193cb5ad3ad5..118ee6789528619f92f26aad2d136af8ea877abe 100644 (file)
@@ -127,6 +127,11 @@ static int ilbctolin_framein(struct ast_trans_pvt *pvt, struct ast_frame *f)
        int16_t *dst = (int16_t *)pvt->outbuf;
        float tmpf[ILBC_SAMPLES];
 
+       if (!f->data && f->datalen) {
+               ast_log(LOG_DEBUG, "issue 16070, ILIB ERROR. data = NULL datalen = %d src = %s\n", f->datalen, f->src ? f->src : "no src set");
+               f->datalen = 0;
+       }
+
        if (f->datalen == 0) { /* native PLC, set fake f->datalen and clear plc_mode */
                f->datalen = ILBC_FRAME_LEN;
                f->samples = ILBC_SAMPLES;