From a665f2f9e1875b1620f99864fd830228cd1aeaf9 Mon Sep 17 00:00:00 2001 From: beveloper Date: Tue, 23 Dec 2003 00:09:39 +0000 Subject: [PATCH] a few checks and fixes git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5735 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../media/plugins/au_reader/au_reader.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/add-ons/media/plugins/au_reader/au_reader.cpp b/src/add-ons/media/plugins/au_reader/au_reader.cpp index f1dc710da3..2f8163b366 100644 --- a/src/add-ons/media/plugins/au_reader/au_reader.cpp +++ b/src/add-ons/media/plugins/au_reader/au_reader.cpp @@ -75,11 +75,26 @@ auReader::Sniff(int32 *streamCount) TRACE(" sampling_rate %ld\n", UINT32(header.sampling_rate)); TRACE(" channel_count %ld\n", UINT32(header.channel_count)); - fDataStart = 28 + UINT32(header.data_start); + fDataStart = UINT32(header.data_start); fDataSize = UINT32(header.data_size); fChannelCount = UINT32(header.channel_count); fFrameRate = UINT32(header.sampling_rate); fFormatCode = UINT32(header.data_format); + + if (fDataStart > filesize) { + TRACE("auReader::Sniff: data start too large\n"); + return B_ERROR; + } + if (fDataStart + fDataSize > filesize) + fDataSize = filesize - fDataStart; + if (fDataSize < 1) { + TRACE("auReader::Sniff: data size too small\n"); + return B_ERROR; + } + if (fChannelCount < 1) + fChannelCount = 1; + if (fFrameRate < 1) + fFrameRate = 44100; switch (fFormatCode) { case SND_FORMAT_UNSPECIFIED: TRACE("SND_FORMAT_UNSPECIFIED\n"); break;