From: Jonathan Rose Date: Mon, 14 Mar 2011 13:12:51 +0000 (+0000) Subject: Fixes null reference bug introduced by audio hook changes that affects various OS... X-Git-Tag: 11.0.0-beta1~1783 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=16c5dda8ab1dc44824c52baa4ff9e34de4a26f1a;p=thirdparty%2Fasterisk.git Fixes null reference bug introduced by audio hook changes that affects various OS distributions. Thanks David. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@310547 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/main/audiohook.c b/main/audiohook.c index bb510e333f..a1d658ce70 100644 --- a/main/audiohook.c +++ b/main/audiohook.c @@ -311,25 +311,26 @@ static struct ast_frame *audiohook_read_frame_both(struct ast_audiohook *audioho ast_debug(1, "Failed to get %d samples from write factory %p\n", (int)samples, &audiohook->write_factory); /* Basically we figure out which buffer to use... and if mixing can be done here */ - if (!read_buf && !write_buf) - return NULL; - - if (read_buf) { - final_buf = buf1; - frame.data.ptr = final_buf; + if (read_buf && read_reference) { + frame.data.ptr = buf1; *read_reference = ast_frdup(&frame); } - - if (write_buf) { - final_buf = buf2; - frame.data.ptr = final_buf; + if (write_buf && write_reference) { + frame.data.ptr = buf2; *write_reference = ast_frdup(&frame); } if (read_buf && write_buf) { - for (i = 0, data1 = read_buf, data2 = write_buf; i < samples; i++, data1++, data2++) + for (i = 0, data1 = read_buf, data2 = write_buf; i < samples; i++, data1++, data2++) { ast_slinear_saturated_add(data1, data2); + } + final_buf = buf1; + } else if (read_buf) { final_buf = buf1; + } else if (write_buf) { + final_buf = buf2; + } else { + return NULL; } /* Make the final buffer part of the frame, so it gets duplicated fine */