Added some error checking after allocations.  Part of bug #1110.
Modified: trunk/reactos/lib/kernel32/misc/errormsg.c
Modified: trunk/reactos/lib/kernel32/misc/profile.c

Modified: trunk/reactos/lib/kernel32/misc/errormsg.c
--- trunk/reactos/lib/kernel32/misc/errormsg.c	2006-01-22 23:28:05 UTC (rev 20993)
+++ trunk/reactos/lib/kernel32/misc/errormsg.c	2006-01-22 23:29:53 UTC (rev 20994)
@@ -197,6 +197,12 @@
         }
     }
     target	= HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, 100);
+    if(target == NULL)
+    {
+        HeapFree(GetProcessHeap(),0,from);
+        SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+        return 0;
+    }
     t	= target;
     talloced= 100;
 
@@ -250,16 +256,37 @@
                             if (NULL!=(x=strchr(f,'!'))) {
                                 *x='\0';
                                 fmtstr=HeapAlloc(GetProcessHeap(),0,strlen(f)+2);
+                                if(fmtstr == NULL)
+                                {
+                                    HeapFree(GetProcessHeap(),0,from);
+                                    HeapFree(GetProcessHeap(),0,target);
+                                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                                    return 0;
+                                }
                                 sprintf(fmtstr,"%%%s",f);
                                 f=x+1;
                             } else {
                                 fmtstr=HeapAlloc(GetProcessHeap(),0,strlen(f)+2);
+                                if(fmtstr == NULL)
+                                {
+                                    HeapFree(GetProcessHeap(),0,from);
+                                    HeapFree(GetProcessHeap(),0,target);
+                                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                                    return 0;
+                                }
                                 sprintf(fmtstr,"%%%s",f);
                                 f+=strlen(f); /*at \0*/
                             }
                         } else {
                             if(!args) break;
                             fmtstr = HeapAlloc(GetProcessHeap(),0,3);
+                            if(fmtstr == NULL)
+                            {
+                                HeapFree(GetProcessHeap(),0,from);
+                                HeapFree(GetProcessHeap(),0,target);
+                                SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                                return 0;
+                            }
                             strcpy( fmtstr, "%s" );
                         }
                         if (args) {
@@ -401,6 +428,11 @@
     if (dwFlags & FORMAT_MESSAGE_FROM_STRING) {
         from = HeapAlloc( GetProcessHeap(), 0, (strlenW((LPCWSTR)lpSource) + 1) *
             sizeof(WCHAR) );
+        if(from == NULL)
+        {
+            SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+            return 0;
+        }
         strcpyW( from, (LPCWSTR)lpSource );
     }
     else {
@@ -418,6 +450,12 @@
     }
 
     target = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, 100 * sizeof(WCHAR) );
+    if(target == NULL)
+    {
+        HeapFree(GetProcessHeap(),0,from);
+        SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+        return 0;
+    }
     t = target;
     talloced= 100;
 
@@ -472,16 +510,37 @@
                             if (NULL!=(x=strchrW(f,'!'))) {
                                 *x='\0';
                                 fmtstr=HeapAlloc( GetProcessHeap(), 0,(strlenW(f)+2)*sizeof(WCHAR));
+                                if(fmtstr == NULL)
+                                {
+                                    HeapFree(GetProcessHeap(),0,from);
+                                    HeapFree(GetProcessHeap(),0,target);
+                                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                                    return 0;
+                                }
                                 sprintfW(fmtstr,PCNTFMTWSTR,f);
                                 f=x+1;
                             } else {
                                 fmtstr=HeapAlloc(GetProcessHeap(),0,(strlenW(f)+2)*sizeof(WCHAR));
+                                if(fmtstr == NULL)
+                                {
+                                    HeapFree(GetProcessHeap(),0,from);
+                                    HeapFree(GetProcessHeap(),0,target);
+                                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                                    return 0;
+                                }
                                 sprintfW(fmtstr,PCNTFMTWSTR,f);
                                 f+=strlenW(f); /*at \0*/
                             }
                         } else {
                             if(!args) break;
                             fmtstr = HeapAlloc( GetProcessHeap(),0,3*sizeof(WCHAR));
+                            if(fmtstr == NULL)
+                            {
+                                HeapFree(GetProcessHeap(),0,from);
+                                HeapFree(GetProcessHeap(),0,target);
+                                SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                                return 0;
+                            }
                             strcpyW( fmtstr, FMTWSTR );
                         }
 

Modified: trunk/reactos/lib/kernel32/misc/profile.c
--- trunk/reactos/lib/kernel32/misc/profile.c	2006-01-22 23:28:05 UTC (rev 20993)
+++ trunk/reactos/lib/kernel32/misc/profile.c	2006-01-22 23:29:53 UTC (rev 20994)
@@ -830,6 +830,11 @@
 
     /* OK, now that CurProfile is definitely free we assign it our new file */
     CurProfile->filename  = HeapAlloc( GetProcessHeap(), 0, (wcslen(buffer)+1) * sizeof(WCHAR) );
+    if(CurProfile->filename == NULL)
+    {
+        SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+        return FALSE;
+    }
     wcscpy( CurProfile->filename, buffer );
 
     if (hFile != INVALID_HANDLE_VALUE)
@@ -1061,6 +1066,11 @@
             DPRINT("  creating key\n");
         }
         key->value = HeapAlloc( GetProcessHeap(), 0, (wcslen(value) + 1) * sizeof(WCHAR) );
+        if(key->value == NULL)
+        {
+            SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+            return FALSE;
+        }
         wcscpy( key->value, value );
         CurProfile->changed = TRUE;
     }
@@ -1126,6 +1136,11 @@
            LPWSTR p;
 
            p = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR));
+           if(p == NULL)
+           {
+               SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+               return FALSE;
+           }
            memcpy(p, def_val, len * sizeof(WCHAR));
            p[len] = '\0';
            pDefVal = p;
@@ -1482,6 +1497,12 @@
             ret = TRUE;
 	    while(*string) {
                 LPWSTR buf = HeapAlloc( GetProcessHeap(), 0, (wcslen(string)+1) * sizeof(WCHAR) );
+                if(buf == NULL)
+                {
+                    RtlLeaveCriticalSection( &PROFILE_CritSect );
+                    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+                    return FALSE;
+                }
                 wcscpy( buf, string );
                 if((p = wcschr( buf, '='))) {
                     *p = '\0';
@@ -1759,6 +1780,11 @@
 
     /* allocate string buffer for hex chars + checksum hex char + '\0' */
     outstring = HeapAlloc( GetProcessHeap(), 0, (bufsize*2 + 2 + 1) * sizeof(WCHAR) );
+    if(outstring == NULL)
+    {
+        SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+        return FALSE;
+    }
     p = outstring;
     for (binbuf = (LPBYTE)buf; binbuf < (LPBYTE)buf+bufsize; binbuf++)
     {