Warn if a unsupported bitmap format is used (Bug #681 & FR #559)

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7273 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
anders_k 2021-06-25 20:44:37 +00:00
parent 774a70ae93
commit ef6d0510ec
11 changed files with 61 additions and 9 deletions

View file

@ -485,3 +485,29 @@ DWORD IsBMPFile(const void*pData, size_t DataSize, GENERICIMAGEINFO*pInfo)
}
return 0;
}
bool LoadImageCanLoadFile(const void*pData, size_t DataSize)
{
bool valid = IsICOCURFile(pData, DataSize) != 0;
if (!valid)
{
GENERICIMAGEINFO info;
UINT headersize = GetBMPFileHeaderSize(pData, DataSize, &info);
valid = headersize == 12 || headersize == 40; // Only supports BITMAPCOREHEADER and BITMAPINFOHEADER (Bug #681 & FR #559)
valid = valid && !info.IsTopDownBitmap(); // TopDown bitmaps are only valid if they are loaded with LR_CREATEDIBSECTION, and if loaded from a resource, and if running on Vista+? and therefore we deny!
}
return valid;
}
bool LoadImageCanLoadFile(const TCHAR *filepath)
{
bool valid = false;
unsigned char header[14+124];
FILE *f = my_fopen(filepath, "rb");
if (f)
{
valid = LoadImageCanLoadFile(header, fread(header, 1, sizeof(header), f));
fclose(f);
}
return valid;
}