13 if ((a == 0) || (((*pab) / a) == b)) {
32 __success(
return != 0) __inline BOOL ValidateBitmapInfoHeader(
33 const BITMAPINFOHEADER *pbmi,
45 if (cbSize <
sizeof(BITMAPINFOHEADER) ||
46 pbmi->biSize <
sizeof(BITMAPINFOHEADER) ||
47 pbmi->biSize > 4096) {
52 if (pbmi->biWidth == 0 || pbmi->biHeight == 0) {
59 if (pbmi->biBitCount > dwBpp) {
64 dwHeight = (DWORD)abs(pbmi->biHeight);
71 dwWidthInBytes = (dwWidthInBits / 8 + 3) & ~3;
80 if (dwSizeImage > 0x40000000 ||
81 pbmi->biSizeImage > 0x40000000) {
86 if (pbmi->biClrUsed > 256) {
90 if (pbmi->biClrUsed == 0 && pbmi->biBitCount <= 8 && pbmi->biBitCount > 0) {
91 dwClrUsed = (1 << pbmi->biBitCount);
93 dwClrUsed = pbmi->biClrUsed;
97 if (cbSize < pbmi->biSize + dwClrUsed *
sizeof(RGBQUAD) +
98 (pbmi->biCompression == BI_BITFIELDS ? 3 *
sizeof(DWORD) : 0)) {
103 if (pbmi->biCompression == BI_RGB || pbmi->biCompression == BI_BITFIELDS) {
104 if (pbmi->biSizeImage != 0) {
105 DWORD dwBits = (DWORD)pbmi->biWidth * (DWORD)pbmi->biBitCount;
106 DWORD dwWidthInBytes = ((DWORD)((dwBits+31) & (~31)) / 8);
107 DWORD dwTotalSize = (DWORD)abs(pbmi->biHeight) * dwWidthInBytes;
108 if (dwTotalSize > pbmi->biSizeImage) {
120 #endif // _CHECKBMI_H_