[ros-diffs] [jimtabor] 43157: - Alexandre Julliard : kernel32: Cope with an empty resource section in UpdateResource. - Wine Bug 19783 : http://bugs.winehq.org/show_bug.cgi?id=19783

jimtabor at svn.reactos.org jimtabor at svn.reactos.org
Sat Sep 26 07:25:52 CEST 2009


Author: jimtabor
Date: Sat Sep 26 07:25:52 2009
New Revision: 43157

URL: http://svn.reactos.org/svn/reactos?rev=43157&view=rev
Log:
- Alexandre Julliard : kernel32: Cope with an empty resource section in UpdateResource.
- Wine Bug 19783 : http://bugs.winehq.org/show_bug.cgi?id=19783

Modified:
    trunk/reactos/dll/win32/kernel32/misc/res.c

Modified: trunk/reactos/dll/win32/kernel32/misc/res.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/misc/res.c?rev=43157&r1=43156&r2=43157&view=diff
==============================================================================
--- trunk/reactos/dll/win32/kernel32/misc/res.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/misc/res.c [iso-8859-1] Sat Sep 26 07:25:52 2009
@@ -405,13 +405,6 @@
         return NULL;
     }
 
-    /* check that the resources section is last */
-    if (i != num_sections - 1)
-    {
-        DPRINT("FIXME: .rsrc isn't the last section\n");
-        return NULL;
-    }
-
     return &sec[i];
 }
 
@@ -565,6 +558,9 @@
         return TRUE;
 
     DPRINT("found .rsrc at %08x, size %08x\n", sec[i].PointerToRawData, sec[i].SizeOfRawData);
+
+    if (!sec[i].PointerToRawData || sec[i].SizeOfRawData < sizeof(IMAGE_RESOURCE_DIRECTORY))
+        return TRUE;
 
     root = (void*) ((BYTE*)base + sec[i].PointerToRawData);
     enumerate_mapped_resources( updates, base, mapping_size, root );
@@ -962,10 +958,15 @@
     if (!sec)
         goto done;
 
-    if ((sec->SizeOfRawData + sec->PointerToRawData) != write_map->size)
-    {
-        DPRINT("FIXME: .rsrc isn't at the end of the image %08x + %08x != %08x\n",
-            sec->SizeOfRawData, sec->PointerToRawData, write_map->size);
+    if (!sec->PointerToRawData)  /* empty section */
+    {
+        sec->PointerToRawData = write_map->size;
+        sec->SizeOfRawData = 0;
+    }
+    else if ((sec->SizeOfRawData + sec->PointerToRawData) != write_map->size)
+    {
+        DPRINT(".rsrc isn't at the end of the image %08x + %08x != %08x for %s\n",
+              sec->SizeOfRawData, sec->PointerToRawData, write_map->size, updates->pFileName);
         goto done;
     }
 




More information about the Ros-diffs mailing list