Rémi Bernon : kernelbase: Convert RtlWalkHeap structure on input too.

Alexandre Julliard julliard at winehq.org
Thu Jun 2 16:26:09 CDT 2022


Module: wine
Branch: master
Commit: 9af87e2c644ae49e65e2bac446339dd92a77bc08
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=9af87e2c644ae49e65e2bac446339dd92a77bc08

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Wed Jun  1 22:08:34 2022 +0200

kernelbase: Convert RtlWalkHeap structure on input too.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>

---

 dlls/kernelbase/memory.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/dlls/kernelbase/memory.c b/dlls/kernelbase/memory.c
index 9490626a40a..cac456d01be 100644
--- a/dlls/kernelbase/memory.c
+++ b/dlls/kernelbase/memory.c
@@ -640,9 +640,24 @@ struct rtl_heap_entry
  */
 BOOL WINAPI DECLSPEC_HOTPATCH HeapWalk( HANDLE heap, PROCESS_HEAP_ENTRY *entry )
 {
-    struct rtl_heap_entry rtl_entry = {.lpData = entry->lpData};
+    struct rtl_heap_entry rtl_entry = {0};
     NTSTATUS status;
 
+    if (!entry) return set_ntstatus( STATUS_INVALID_PARAMETER );
+
+    rtl_entry.lpData = entry->lpData;
+    rtl_entry.cbData = entry->cbData;
+    rtl_entry.cbOverhead = entry->cbOverhead;
+    rtl_entry.iRegionIndex = entry->iRegionIndex;
+
+    if (entry->wFlags & PROCESS_HEAP_ENTRY_BUSY)
+        rtl_entry.wFlags |= RTL_HEAP_ENTRY_BUSY;
+    if (entry->wFlags & PROCESS_HEAP_REGION)
+        rtl_entry.wFlags |= RTL_HEAP_ENTRY_REGION;
+    if (entry->wFlags & PROCESS_HEAP_UNCOMMITTED_RANGE)
+        rtl_entry.wFlags |= RTL_HEAP_ENTRY_UNCOMMITTED;
+    memcpy( &rtl_entry.Region, &entry->u.Region, sizeof(entry->u.Region) );
+
     if (!(status = RtlWalkHeap( heap, &rtl_entry )))
     {
         entry->lpData = rtl_entry.lpData;




More information about the wine-cvs mailing list