Coverity fixes for module/media_file.

BUG=Coverity report.
TEST=N/A.

Review URL: https://webrtc-codereview.appspot.com/397003

git-svn-id: http://webrtc.googlecode.com/svn/trunk@1780 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
henrike@webrtc.org 2012-02-27 21:50:40 +00:00
parent ead7d25c1a
commit 26085e18e0
4 changed files with 83 additions and 20 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@ -8,6 +8,10 @@
* be found in the AUTHORS file in the root of the source tree.
*/
// TODO(henrike): reassess the error handling in this class. Currently failure
// is detected by asserts in many places. Also a refactoring of this class would
// be beneficial.
#include "avi_file.h"
#include <assert.h>
@ -134,11 +138,51 @@ AviFile::AVIINDEXENTRY::AVIINDEXENTRY(WebRtc_UWord32 inckid,
}
AviFile::AviFile()
: _crit(CriticalSectionWrapper::CreateCriticalSection()),
_aviFile(NULL),
_aviHeader(),
_videoStreamHeader(),
_audioStreamHeader(),
_videoFormatHeader(),
_audioFormatHeader(),
_videoConfigParameters(),
_videoConfigLength(0),
_videoStreamName(),
_videoStreamNameLength(0),
_audioConfigParameters(),
_audioStreamName(),
_videoStream(),
_audioStream(),
_nrStreams(0),
_aviLength(0),
_dataLength(0),
_bytesRead(0),
_dataStartByte(0),
_framesRead(0),
_videoFrames(0),
_audioFrames(0),
_reading(false),
_openedAs(AVI_AUDIO),
_loop(false),
_writing(false),
_bytesWritten(0),
_riffSizeMark(0),
_moviSizeMark(0),
_totNumFramesMark(0),
_videoStreamLengthMark(0),
_audioStreamLengthMark(0),
_moviListOffset(0),
_writeAudioStream(false),
_writeVideoStream(false),
_aviMode(NotSet),
_videoCodecConfigParams(NULL),
_videoCodecConfigParamsLength(0),
_videoStreamDataChunkPrefix(0),
_audioStreamDataChunkPrefix(0),
_created(false),
_indexList(new ListWrapper())
{
_crit = CriticalSectionWrapper::CreateCriticalSection();
_indexList = new ListWrapper();
ResetMembers();
ResetComplexMembers();
}
AviFile::~AviFile()
@ -275,7 +319,7 @@ WebRtc_Word32 AviFile::GetVideoStreamInfo(AVISTREAMHEADER& videoStreamHeader,
memcpy(&videoStreamHeader, &_videoStreamHeader, sizeof(_videoStreamHeader));
memcpy(&bitmapInfo, &_videoFormatHeader, sizeof(_videoFormatHeader));
if (_videoConfigParameters && configLength <= _videoConfigLength)
if (configLength <= _videoConfigLength)
{
memcpy(codecConfigParameters, _videoConfigParameters,
_videoConfigLength);
@ -1139,6 +1183,9 @@ size_t AviFile::PutBufferZ(const char* str)
long AviFile::PutLE32LengthFromCurrent(long startPos)
{
const long endPos = ftell(_aviFile);
if (endPos < 0) {
return 0;
}
bool success = (0 == fseek(_aviFile, startPos - 4, SEEK_SET));
if (!success) {
assert(false);
@ -1159,6 +1206,10 @@ long AviFile::PutLE32LengthFromCurrent(long startPos)
void AviFile::PutLE32AtPos(long pos, WebRtc_UWord32 word)
{
const long currPos = ftell(_aviFile);
if (currPos < 0) {
assert(false);
return;
}
bool success = (0 == fseek(_aviFile, pos, SEEK_SET));
if (!success) {
assert(false);
@ -1214,18 +1265,9 @@ void AviFile::CloseWrite()
void AviFile::ResetMembers()
{
_aviFile = NULL;
ResetComplexMembers();
memset(&_aviHeader, 0, sizeof(AVIMAINHEADER));
memset(&_videoStreamHeader, 0, sizeof(AVISTREAMHEADER));
memset(&_audioStreamHeader, 0, sizeof(AVISTREAMHEADER));
memset(&_videoFormatHeader, 0, sizeof(BITMAPINFOHEADER));
memset(&_audioFormatHeader, 0, sizeof(WAVEFORMATEX));
memset(_videoConfigParameters, 0, CODEC_CONFIG_LENGTH);
memset(_videoStreamName, 0, STREAM_NAME_LENGTH);
memset(_audioStreamName, 0, STREAM_NAME_LENGTH);
memset(&_videoStream, 0, sizeof(AVIStream));
memset(&_audioStream, 0, sizeof(AVIStream));
_aviFile = NULL;
_nrStreams = 0;
_aviLength = 0;
@ -1266,6 +1308,20 @@ void AviFile::ResetMembers()
_videoConfigLength = 0;
}
void AviFile::ResetComplexMembers()
{
memset(&_aviHeader, 0, sizeof(AVIMAINHEADER));
memset(&_videoStreamHeader, 0, sizeof(AVISTREAMHEADER));
memset(&_audioStreamHeader, 0, sizeof(AVISTREAMHEADER));
memset(&_videoFormatHeader, 0, sizeof(BITMAPINFOHEADER));
memset(&_audioFormatHeader, 0, sizeof(WAVEFORMATEX));
memset(_videoConfigParameters, 0, CODEC_CONFIG_LENGTH);
memset(_videoStreamName, 0, STREAM_NAME_LENGTH);
memset(_audioStreamName, 0, STREAM_NAME_LENGTH);
memset(&_videoStream, 0, sizeof(AVIStream));
memset(&_audioStream, 0, sizeof(AVIStream));
}
size_t AviFile::GetByte(WebRtc_UWord8& word)
{
return fread(&word, sizeof(WebRtc_UWord8), sizeof(WebRtc_UWord8), _aviFile);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@ -177,6 +177,7 @@ private:
void CloseWrite();
void ResetMembers();
void ResetComplexMembers();
WebRtc_Word32 ReadRIFF();
WebRtc_Word32 ReadHeaders();

View File

@ -501,7 +501,6 @@ WebRtc_Word32 MediaFileImpl::StartPlayingStream(
const WebRtc_UWord32 stopPointMs,
bool videoOnly)
{
if(!ValidFileFormat(format,codecInst))
{
return -1;
@ -520,7 +519,7 @@ WebRtc_Word32 MediaFileImpl::StartPlayingStream(
kTraceFile,
_id,
"StartPlaying called, but already playing or recording file %s",
(_fileName == NULL) ? "NULL" : _fileName);
(_fileName[0] == '\0') ? "(name not set)" : _fileName);
return -1;
}
@ -574,6 +573,9 @@ WebRtc_Word32 MediaFileImpl::StartPlayingStream(
case kFileFormatPcm16kHzFile:
case kFileFormatPcm32kHzFile:
{
// ValidFileFormat() called in the beginneing of this function
// prevents codecInst from being NULL here.
assert(codecInst != NULL);
if(!ValidFrequency(codecInst->plfreq) ||
_ptrFileUtilityObj->InitPCMReading(stream, startPointMs,
stopPointMs,
@ -590,6 +592,9 @@ WebRtc_Word32 MediaFileImpl::StartPlayingStream(
}
case kFileFormatPreencodedFile:
{
// ValidFileFormat() called in the beginneing of this function
// prevents codecInst from being NULL here.
assert(codecInst != NULL);
if(_ptrFileUtilityObj->InitPreEncodedReading(stream, *codecInst) ==
-1)
{

View File

@ -2318,6 +2318,7 @@ WebRtc_Word32 ModuleFileUtility::FileDurationMs(const WebRtc_Word8* fileName,
if(fileName == NULL)
{
WEBRTC_TRACE(kTraceError, kTraceFile, _id, "filename NULL");
return -1;
}
WebRtc_Word32 time_in_ms = -1;