From bb04be293c08a86c9d0b4fb935b2859fd2206cfc Mon Sep 17 00:00:00 2001 From: foo86 Date: Thu, 28 May 2015 19:27:14 +0300 Subject: [PATCH] Add excessive frame size workaround to stream parser. --- libdcadec/dca_stream.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libdcadec/dca_stream.c b/libdcadec/dca_stream.c index 0a06748..326e839 100644 --- a/libdcadec/dca_stream.c +++ b/libdcadec/dca_stream.c @@ -280,6 +280,10 @@ static int read_frame(struct dcadec_stream *stream, uint32_t *sync_p) if (fread(buf + sizeof(header), frame_size - sizeof(header), 1, stream->fp) != 1) return 0; + // Work around overread that occurs for 14-bit streams with excessive frame size + if (sync == SYNC_WORD_CORE_LE14 || sync == SYNC_WORD_CORE_BE14) + stream->backup_sync = DCA_MEM32BE(&buf[frame_size - 4]); + // Convert the frame in place if ((ret = dcadec_frame_convert_bitstream(buf, &frame_size, buf, frame_size)) < 0) return ret;