Only do frame payload check for HOLD frames.

This code was added for helping to debug the source of invalid HOLD frames.
However, a side effect of this is that it will incorrectly report errors for
frames that have an integer payload.  Make the check for this block specific
to the HOLD frame case.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@233092 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Russell Bryant
2009-12-04 17:12:47 +00:00
parent 2e6e7dcdc2
commit a10f93404d

View File

@@ -2513,15 +2513,15 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio)
ast_frame_dump(chan->name, f, "<<"); ast_frame_dump(chan->name, f, "<<");
chan->fin = FRAMECOUNT_INC(chan->fin); chan->fin = FRAMECOUNT_INC(chan->fin);
if (f && f->datalen == 0 && f->data) { if (f && f->frametype == AST_FRAME_CONTROL && f->subclass == AST_CONTROL_HOLD && f->datalen == 0 && f->data) {
/* fix invalid pointer */ /* fix invalid pointer */
f->data = NULL; f->data = NULL;
#ifdef AST_DEVMODE #ifdef AST_DEVMODE
ast_log(LOG_ERROR, "Found frame with src '%s' on channel '%s' with datalen zero, but non-null data pointer!\n", f->src, chan->name); ast_log(LOG_ERROR, "Found HOLD frame with src '%s' on channel '%s' with datalen zero, but non-null data pointer!\n", f->src, chan->name);
ast_frame_dump(chan->name, f, "<<"); ast_frame_dump(chan->name, f, "<<");
#else #else
if (option_debug > 2) { if (option_debug > 2) {
ast_log(LOG_DEBUG, "Found frame with src '%s' on channel '%s' with datalen zero, but non-null data pointer!\n", f->src, chan->name); ast_log(LOG_DEBUG, "Found HOLD frame with src '%s' on channel '%s' with datalen zero, but non-null data pointer!\n", f->src, chan->name);
} }
#endif #endif
} }