diff options
| author | andreykproductengine <andreykproductengine@lindenlab.com> | 2017-09-18 18:11:04 +0300 | 
|---|---|---|
| committer | andreykproductengine <andreykproductengine@lindenlab.com> | 2017-09-18 18:11:04 +0300 | 
| commit | 18483e902c0c821dc5d0bb8349f83d1a3b34d5a8 (patch) | |
| tree | f3df62efce2c755e34b84e4a479e3d855df6c76d | |
| parent | 0b7020c0c57560e8ffd13ea57e378807222e4680 (diff) | |
MAINT-7779 Protections against wrong data
| -rw-r--r-- | indra/newview/lltexturecache.cpp | 19 | 
1 files changed, 9 insertions, 10 deletions
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index f0c28041d1..87a2c0ae60 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -550,9 +550,11 @@ bool LLTextureCacheRemoteWorker::doWrite()  	{  		if ((mOffset != 0) // We currently do not support write offsets  			|| (mDataSize <= 0) // Things will go badly wrong if mDataSize is nul or negative... -			|| (mImageSize < mDataSize)) +			|| (mImageSize < mDataSize) +			|| (mRawDiscardLevel < 0) +			|| (mRawImage->isBufferInvalid())) // decode failed or malfunctioned, don't write  		{ -			LL_WARNS() << "INIT state check failed" << LL_ENDL; +			LL_WARNS() << "INIT state check failed for image: " << mID << " Size: " << mImageSize << " DataSize: " << mDataSize << " Discard:" << mRawDiscardLevel << LL_ENDL;  			mDataSize = -1; // failed  			done = true;  		} @@ -577,15 +579,12 @@ bool LLTextureCacheRemoteWorker::doWrite()  			idx = mCache->setHeaderCacheEntry(mID, entry, mImageSize, mDataSize); // create the new entry.  			if(idx >= 0)  			{ -				// (almost always) write to the fast cache. -				if (mRawImage->getDataSize()) +				// write to the fast cache. +				if(!mCache->writeToFastCache(idx, mRawImage, mRawDiscardLevel))  				{ -					if(!mCache->writeToFastCache(idx, mRawImage, mRawDiscardLevel)) -					{ -						LL_WARNS() << "writeToFastCache failed" << LL_ENDL; -						mDataSize = -1; // failed -						done = true; -					} +					LL_WARNS() << "writeToFastCache failed" << LL_ENDL; +					mDataSize = -1; // failed +					done = true;  				}  			}  		}  | 
