summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY3
-rw-r--r--dxr3audiodecoder.c8
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];