В ходе проверки с cppcheck статического кода инструмента анализа (http://sourceforge.net/apps/mediawiki/cppcheck/index.php?title=Main_Page) инструмент обнаружил серьезную ошибку в коде:буфер «» доступен вне границ
#define MAX_PICTURE_HISTORY 10
#define PICTURE_INTERLACED_ODD 1
#define PICTURE_INTERLACED_EVEN 2
typedef struct
{
unsigned char* pData;
unsigned int Flags;
} TPicture;
typedef struct
{
TPicture* PictureHistory[MAX_PICTURE_HISTORY];
unsigned char *Overlay;
unsigned int OverlayPitch;
unsigned int LineLength;
int FrameWidth;
int FrameHeight;
int FieldHeight;
MEMCPY_FUNC* pMemcpy;
unsigned int InputPitch;
} TDeinterlaceInfo;
Код:
TPicture Picture[ 8 ];
int stride = (width*2);
int i;
Info.FieldHeight = height/2;
Info.FrameHeight = height;
Info.FrameWidth = width;
Info.InputPitch = stride*2;
Info.LineLength = stride;
Info.OverlayPitch = outstride;
Info.pMemcpy = fast_memcpy;
Picture[ 0 ].pData = data->f0 + stride;
Picture[ 0 ].Flags = PICTURE_INTERLACED_ODD;
Picture[ 1 ].pData = data->f0;
Picture[ 1 ].Flags = PICTURE_INTERLACED_EVEN;
Picture[ 2 ].pData = data->f1 + stride;
Picture[ 2 ].Flags = PICTURE_INTERLACED_ODD;
Picture[ 3 ].pData = data->f1;
Picture[ 3 ].Flags = PICTURE_INTERLACED_EVEN;
Picture[ 4 ].pData = data->f2 + stride;
Picture[ 4 ].Flags = PICTURE_INTERLACED_ODD;
Picture[ 5 ].pData = data->f2;
Picture[ 5 ].Flags = PICTURE_INTERLACED_EVEN;
for(i = 0; i < MAX_PICTURE_HISTORY; i++) {
Info.PictureHistory[ i ] = &(Picture[ i ]); /* <-- The buffer Picture is accessed out of bounds */
}
В приведенном выше коде не должно быть ничего плохого. Любые идеи, почему они берутся и как это исправить? С уважением.
Ваш статического анализа не сказать вам значение 'i' в случай отказа? –
Если у вас появилось сообщение об ошибке с инструментом, включите его в свой вопрос. –