From 7d7b7eb2f71df2e90e4100348993966e5c26d022 Mon Sep 17 00:00:00 2001 From: Kirill Belokurov Date: Fri, 28 Mar 2008 17:00:38 +0200 Subject: fix overreading from input buffer and report lost bytes in lpcm decoder --- src/libxineadec/xine_lpcm_decoder.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libxineadec/xine_lpcm_decoder.c b/src/libxineadec/xine_lpcm_decoder.c index 9587da6e8..eeed7ba35 100644 --- a/src/libxineadec/xine_lpcm_decoder.c +++ b/src/libxineadec/xine_lpcm_decoder.c @@ -187,7 +187,7 @@ static void lpcm_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { uint8_t *d = (uint8_t *)audio_buffer->mem; int n = buf->size; - while (n >= 0) { + while (n >= 3) { if ( stream_be ) { if ( stream_be == this->cpu_be ) { *d++ = s[0]; @@ -211,6 +211,10 @@ static void lpcm_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { s += 3; n -= 3; } + + if ( (d - (uint8_t*)audio_buffer->mem)/2*3 < buf->size ) + xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "lpcm_decoder: lost %i bytes\n", (int)(buf->size - (d - (uint8_t*)audio_buffer->mem))/2*3); + } else { memcpy (audio_buffer->mem, sample_buffer, buf->size); } -- cgit v1.2.3