summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirill Belokurov <kirill.belokurov@gmail.com>2008-03-28 17:00:38 +0200
committerKirill Belokurov <kirill.belokurov@gmail.com>2008-03-28 17:00:38 +0200
commit7d7b7eb2f71df2e90e4100348993966e5c26d022 (patch)
treecd828ff8837e74f29c38c0f22c082d8806fee72a
parent8fd1e52ecdd12b6e8b6ad920e47702201aeafb4b (diff)
downloadxine-lib-7d7b7eb2f71df2e90e4100348993966e5c26d022.tar.gz
xine-lib-7d7b7eb2f71df2e90e4100348993966e5c26d022.tar.bz2
fix overreading from input buffer and report lost bytes in lpcm decoder
-rw-r--r--src/libxineadec/xine_lpcm_decoder.c6
1 files changed, 5 insertions, 1 deletions
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);
}