aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b>2009-11-06 17:07:13 +0000
committerdvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b>2009-11-06 17:07:13 +0000
commit9ee8e2eb77bb664444d9fed921a4461df49ac9aa (patch)
treefbaea57a37673fc5b68f09234377cc0c5e4b4802
parentc9fdb86c2ec0f6b223f5bdc650c6aa1b13244fd9 (diff)
fixes segfault in iLBC
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: http://svn.digium.com/svn/asterisk/branches/1.4@228418 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--codecs/codec_ilbc.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/codecs/codec_ilbc.c b/codecs/codec_ilbc.c
index b5fc9bf32..118ee6789 100644
--- a/codecs/codec_ilbc.c
+++ b/codecs/codec_ilbc.c
@@ -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;