--- trunk/reactos/lib/user32/windows/bitmap.c 2005-12-12 20:41:27 UTC (rev 20116)
+++ trunk/reactos/lib/user32/windows/bitmap.c 2005-12-12 20:46:26 UTC (rev 20117)
@@ -176,12 +176,18 @@
IconDIR = MapViewOfFile(hSection, FILE_MAP_READ, 0, 0, 0);
CloseHandle(hSection);
- if (IconDIR == NULL || 0 != IconDIR->idReserved
- || (IMAGE_ICON != IconDIR->idType && IMAGE_CURSOR != IconDIR->idType))
+ if (IconDIR == NULL)
{
return NULL;
}
+ if (0 != IconDIR->idReserved ||
+ (IMAGE_ICON != IconDIR->idType && IMAGE_CURSOR != IconDIR->idType))
+ {
+ UnmapViewOfFile(IconDIR);
+ return NULL;
+ }
+
/*
* Get a handle to the screen dc, the icon we create is going to be
* compatable with it.
@@ -213,11 +219,17 @@
if (!dirEntry)
{
UnmapViewOfFile(IconDIR);
- return(NULL);
+ return NULL;
}
SafeIconImage = RtlAllocateHeap(GetProcessHeap(), 0, dirEntry->dwBytesInRes);
+ if (SafeIconImage == NULL)
+ {
+ UnmapViewOfFile(IconDIR);
+ return NULL;
+ }
memcpy(SafeIconImage, ((PBYTE)IconDIR) + dirEntry->dwImageOffset, dirEntry->dwBytesInRes);
+ UnmapViewOfFile(IconDIR);
/* at this point we have a copy of the icon image to play with */
@@ -351,9 +363,9 @@
0,
NULL);
if (hFile == NULL)
- {
- return(NULL);
- }
+ {
+ return NULL;
+ }
hSection = CreateFileMappingW(hFile,
NULL,
@@ -362,43 +374,42 @@
0,
NULL);
+ CloseHandle(hFile);
if (hSection == NULL)
- {
- CloseHandle(hFile);
- return(NULL);
- }
+ {
+ return NULL;
+ }
+
IconDIR = MapViewOfFile(hSection,
FILE_MAP_READ,
0,
0,
0);
+ CloseHandle(hSection);
+ if (IconDIR == NULL)
+ {
+ return NULL;
+ }
+
+ if (0 != IconDIR->idReserved ||
+ (IMAGE_ICON != IconDIR->idType && IMAGE_CURSOR != IconDIR->idType))
+ {
+ UnmapViewOfFile(IconDIR);
+ return NULL;
+ }
- if (IconDIR == NULL || 0 != IconDIR->idReserved
- || (IMAGE_ICON != IconDIR->idType && IMAGE_CURSOR != IconDIR->idType))
- {
- CloseHandle(hFile);
- CloseHandle(hSection);
- return(NULL);
- }
-
//pick the best size.
dirEntry = (CURSORICONDIRENTRY *) CURSORICON_FindBestIcon( IconDIR, width, height, 1);
-
-
if (!dirEntry)
- {
- CloseHandle(hFile);
- CloseHandle(hSection);
- UnmapViewOfFile(IconDIR);
- return(NULL);
- }
+ {
+ UnmapViewOfFile(IconDIR);
+ return NULL;
+ }
SafeIconImage = RtlAllocateHeap(GetProcessHeap(), 0, dirEntry->dwBytesInRes);
memcpy(SafeIconImage, ((PBYTE)IconDIR) + dirEntry->dwImageOffset, dirEntry->dwBytesInRes);
-
- CloseHandle(hFile);
- CloseHandle(hSection);
+ UnmapViewOfFile(IconDIR);
}
//at this point we have a copy of the icon image to play with
@@ -430,10 +441,9 @@
if (hScreenDc == NULL)
{
if (fuLoad & LR_LOADFROMFILE)
- {
- RtlFreeHeap(GetProcessHeap(), 0, SafeIconImage);
- UnmapViewOfFile(IconDIR);
- }
+ {
+ RtlFreeHeap(GetProcessHeap(), 0, SafeIconImage);
+ }
return(NULL);
}
@@ -684,6 +694,11 @@
if ((res = CreateBitmapIndirect(&bm)))
{
char *buf = HeapAlloc(GetProcessHeap(), 0, bm.bmWidthBytes * bm.bmHeight);
+ if (buf == NULL)
+ {
+ DeleteObject(res);
+ return NULL;
+ }
GetBitmapBits(hnd, bm.bmWidthBytes * bm.bmHeight, buf);
SetBitmapBits(res, bm.bmWidthBytes * bm.bmHeight, buf);
HeapFree(GetProcessHeap(), 0, buf);