[Bug 52046] New: UpdateResource does not delete resources

WineHQ Bugzilla wine-bugs at winehq.org
Mon Nov 15 17:19:25 CST 2021


https://bugs.winehq.org/show_bug.cgi?id=52046

            Bug ID: 52046
           Summary: UpdateResource does not delete resources
           Product: Wine
           Version: unspecified
          Hardware: x86-64
                OS: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: kernel32
          Assignee: wine-bugs at winehq.org
          Reporter: info at daniel-marschall.de
      Distribution: ---

Hello,

I noticed that UpdateResourceA() does not delete resources if data=NULL and
length=0.


Example code

HANDLE hUpdate = BeginUpdateResourceA("d:\\test.dll", false);
UpdateResourceA(hUpdate, "TEST", "X", 1033, NULL, 0);
EndUpdateResourceA(hUpdate, false);



I analyzed the code
https://github.com/wine-mirror/wine/blob/master/dlls/kernel32/resource.c and I
have found the following:

`BeginUpdateResourceW` creates a list `list_init( &updates->root );` of type
`QUEUEDUPDATES`.

The list is empty and stays empty!

`check_pe_exe( file, updates )` is called, but the argument `updates` is not
used. The list will not be filled with the resources of the EXE file!

When `UpdateResource` wants to delete a resource, then `update_add_resource`
will not find the existing resource: `find_resource_dir_entry` fails, because
the list is empty. So there is nothing to delete.

Another side effect of this bug:
If I add or modify a resource (it will get added to the queue) and then delete
the resource (it will be deleted from the queue), then the resource will stay
unchanged in the target file.


I think the fix would be that `check_pe_exe` loads all resources into the list
(which is then not a "queue" anymore), then the add/delete/change operations
are taking place, and in EndUpdateResource, the changes are written (or
discarded).

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list