Index: main/channel.c =================================================================== --- main/channel.c (revision 115607) +++ main/channel.c (working copy) @@ -2114,10 +2114,9 @@ break; case AST_FRAME_DTMF_END: ast_log(LOG_DTMF, "DTMF end '%c' received on %s, duration %ld ms\n", f->subclass, chan->name, f->len); - /* Queue it up if DTMF is deffered, or if DTMF emulation is forced. - * However, only let emulation be forced if the other end cares about BEGIN frames */ - if ( ast_test_flag(chan, AST_FLAG_DEFER_DTMF) || - (ast_test_flag(chan, AST_FLAG_EMULATE_DTMF) && !ast_test_flag(chan, AST_FLAG_END_DTMF_ONLY)) ) { + /* Queue it up if DTMF is deffered, or if DTMF emulation is forced. */ + if (ast_test_flag(chan, AST_FLAG_DEFER_DTMF | AST_FLAG_EMULATE_DTMF)) { + if (strlen(chan->dtmfq) < sizeof(chan->dtmfq) - 2) { ast_log(LOG_DTMF, "DTMF end '%c' put into dtmf queue on %s\n", f->subclass, chan->name); chan->dtmfq[strlen(chan->dtmfq)] = f->subclass;