diff --git a/contrib/minizip/zip.c b/contrib/minizip/zip.c index 0bbdf77e5f..5b0a0422ca 100644 --- a/contrib/minizip/zip.c +++ b/contrib/minizip/zip.c @@ -2212,9 +2212,21 @@ extern int ZEXPORT zipRemoveExtraInfoBlock(char* pData, int* dataLen, short sHea while(p < (pData + *dataLen)) { + if ((pData + *dataLen) - p < 4) + { + free(pNewHeader); + return ZIP_PARAMERROR; + } + header = *(short*)p; dataSize = *(((short*)p)+1); + if (dataSize < 0 || dataSize + 4 > (pData + *dataLen) - p) + { + free(pNewHeader); + return ZIP_PARAMERROR; + } + if( header == sHeader ) /* Header found. */ { p += dataSize + 4; /* skip it. do not copy to temp buffer */