diff options
| author | Tofu Linden <tofu.linden@lindenlab.com> | 2010-08-09 16:14:12 +0100 | 
|---|---|---|
| committer | Tofu Linden <tofu.linden@lindenlab.com> | 2010-08-09 16:14:12 +0100 | 
| commit | 90a73085fda47da5c966f246e96667f8c11d9579 (patch) | |
| tree | 880422117d71b27a877d0e1b007c73f70d389ac9 | |
| parent | b22b042edd0a222f423df6043b6b03ed469f2cd3 (diff) | |
EXT-8597 FIXED [crashhunters] LLVorbisDecodeState::initDecode()
not for certain fixed, but some robustification.
| -rw-r--r-- | indra/llaudio/llaudiodecodemgr.cpp | 24 | 
1 files changed, 19 insertions, 5 deletions
| diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp index 290206ee22..fc2190707a 100644 --- a/indra/llaudio/llaudiodecodemgr.cpp +++ b/indra/llaudio/llaudiodecodemgr.cpp @@ -230,19 +230,29 @@ BOOL LLVorbisDecodeState::initDecode()  	bool abort_decode = false; -	if( vi->channels < 1 || vi->channels > LLVORBIS_CLIP_MAX_CHANNELS ) +	if (vi) +	{ +		if( vi->channels < 1 || vi->channels > LLVORBIS_CLIP_MAX_CHANNELS ) +		{ +			abort_decode = true; +			llwarns << "Bad channel count: " << vi->channels << llendl; +		} +	} +	else // !vi  	{  		abort_decode = true; -		llwarns << "Bad channel count: " << vi->channels << llendl; +		llwarns << "No default bitstream found" << llendl;	  	} -	if( (size_t)sample_count > LLVORBIS_CLIP_REJECT_SAMPLES ) +	if( (size_t)sample_count > LLVORBIS_CLIP_REJECT_SAMPLES || +	    (size_t)sample_count <= 0)  	{  		abort_decode = true;  		llwarns << "Illegal sample count: " << sample_count << llendl;  	} -	if( size_guess > LLVORBIS_CLIP_REJECT_SIZE ) +	if( size_guess > LLVORBIS_CLIP_REJECT_SIZE || +	    size_guess < 0)  	{  		abort_decode = true;  		llwarns << "Illegal sample size: " << size_guess << llendl; @@ -251,7 +261,11 @@ BOOL LLVorbisDecodeState::initDecode()  	if( abort_decode )  	{  		llwarns << "Canceling initDecode. Bad asset: " << mUUID << llendl; -		llwarns << "Bad asset encoded by: " << ov_comment(&mVF,-1)->vendor << llendl; +		vorbis_comment* comment = ov_comment(&mVF,-1); +		if (comment && comment->vendor) +		{ +			llwarns << "Bad asset encoded by: " << comment->vendor << llendl; +		}  		delete mInFilep;  		mInFilep = NULL;  		return FALSE; | 
