History

Add protection for memcpy overlap

Haibo Zhu committed 11 years ago

Commit 6b4912c1 parent 6b503842 files · +15 −6Browse files

Showing the changes to codec/decoder/core/src/error_concealment.cpp (1 of 2 files). Show all

Unified · Split

codec/decoder/core/src/error_concealment.cpp+8−1
@@ -93,6 +93,8 @@ void DoErrorConFrameCopy (PWelsDecoderContext pCtx) { · 92 unmodified lines
9393 memset (pDstPic->pData[0], 128, uiHeightInPixelY * iStrideY);
9494 memset (pDstPic->pData[1], 128, (uiHeightInPixelY >> 1) * iStrideUV);
9595 memset (pDstPic->pData[2], 128, (uiHeightInPixelY >> 1) * iStrideUV);
96+ } else if (pSrcPic == pDstPic) {
97+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "DoErrorConFrameCopy()::EC memcpy overlap.");
9698 } else { //has ref pic here
9799 memcpy (pDstPic->pData[0], pSrcPic->pData[0], uiHeightInPixelY * iStrideY);
98100 memcpy (pDstPic->pData[1], pSrcPic->pData[1], (uiHeightInPixelY >> 1) * iStrideUV);
@@ -117,6 +119,10 @@ void DoErrorConSliceCopy (PWelsDecoderContext pCtx) { · 18 unmodified lines
117119 uint8_t* pSrcData, *pDstData;
118120 uint32_t iSrcStride; // = pSrcPic->iLinesize[0];
119121 uint32_t iDstStride = pDstPic->iLinesize[0];
122+ if (pSrcPic == pDstPic) {
123+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "DoErrorConSliceCopy()::EC memcpy overlap.");
124+ return;
125+ }
120126 for (int32_t iMbY = 0; iMbY < iMbHeight; ++iMbY) {
121127 for (int32_t iMbX = 0; iMbX < iMbWidth; ++iMbX) {
122128 iMbXyIndex = iMbY * iMbWidth + iMbX;
@@ -384,7 +390,8 @@ void DoErrorConSliceMVCopy (PWelsDecoderContext pCtx) { · 261 unmodified lines
384390 sMCRefMem.iPicHeight = pDstPic->iHeightInPixel;
385391 if (pDstPic == pSrcPic) {
386392 // output error info, EC will be ignored in DoMbECMvCopy
387− WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR, "DoErrorConSliceMVCopy()::pPreviousPic and pDec use same buffer, ignored.");
393+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "DoErrorConSliceMVCopy()::EC memcpy overlap.");
394+ return;
388395 }
389396 }
390397

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t