From 4a33fe954fa713be10b0efdecbecd4e1b1f9caa7 Mon Sep 17 00:00:00 2001 From: scop Date: Fri, 26 Aug 2005 18:11:40 +0000 Subject: Don't abort with lpcm frames containing an odd number of bytes, drop instead. --- HISTORY | 3 +++ dxr3audiodecoder.c | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/HISTORY b/HISTORY index 7fa4c60..a00cfed 100644 --- a/HISTORY +++ b/HISTORY @@ -293,3 +293,6 @@ NOTE: I havent found time to include all of the languages, will be done in pre2 - don't override OSD's {Save,Restore}Region with dummies (Luca Olivetti) 2005-??-??: Version 0.2.4 + +- don't abort with lpcm frames containing an odd number of bytes, drop + the frame instead (Ville Skyttä) diff --git a/dxr3audiodecoder.c b/dxr3audiodecoder.c index 67238d2..f742375 100644 --- a/dxr3audiodecoder.c +++ b/dxr3audiodecoder.c @@ -202,10 +202,14 @@ void cDxr3AudioDecoder::DecodeLpcm(const uint8_t* buf, int length, { if (length > (LPCM_HEADER_LENGTH + 2)) { - uint8_t* pFrame = new uint8_t[length - LPCM_HEADER_LENGTH]; // only even number of bytes are allowed - assert(!((length - LPCM_HEADER_LENGTH) % 2)); + if ((length - LPCM_HEADER_LENGTH) % 2 != 0) + { + esyslog("dxr3: audiodecoder: skipping %d lpcm bytes", length); + return; + } + uint8_t* pFrame = new uint8_t[length - LPCM_HEADER_LENGTH]; for (int i = LPCM_HEADER_LENGTH; i < length; i += 2) { pFrame[i - LPCM_HEADER_LENGTH] = buf[i + 1]; -- cgit v1.2.3