[RTL] Capture parameters with using SEH. Fixes new test for ntdll:RtlAllocateHeap
authorDmitry Chapyshev <dmitry@reactos.org>
Sun, 25 Sep 2016 17:05:52 +0000 (17:05 +0000)
committerDmitry Chapyshev <dmitry@reactos.org>
Sun, 25 Sep 2016 17:05:52 +0000 (17:05 +0000)
svn path=/trunk/; revision=72802

reactos/sdk/lib/rtl/heap.c

index 4fffb75..227224e 100644 (file)
@@ -1256,8 +1256,23 @@ RtlCreateHeap(ULONG Flags,
         Flags &= HEAP_CREATE_VALID_MASK;
     }
 
-    /* TODO: Capture parameters, once we decide to use SEH */
-    if (!Parameters) Parameters = &SafeParams;
+    /* Capture parameters */
+    if (Parameters)
+    {
+        _SEH2_TRY
+        {
+            /* If size of structure correct, then copy it */
+            if (Parameters->Length == sizeof(RTL_HEAP_PARAMETERS))
+                RtlCopyMemory(&SafeParams, Parameters, sizeof(RTL_HEAP_PARAMETERS));
+        }
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+        {
+            _SEH2_YIELD(return NULL);
+        }
+        _SEH2_END;
+    }
+
+    Parameters = &SafeParams;
 
     /* Check global flags */
     if (NtGlobalFlags & FLG_HEAP_DISABLE_COALESCING)
@@ -1960,7 +1975,7 @@ RtlAllocateHeap(IN PVOID HeapPtr,
     /* Add settable user flags, if any */
     EntryFlags |= (Flags & HEAP_SETTABLE_USER_FLAGS) >> 4;
 
-    Index = AllocationSize >>  HEAP_ENTRY_SHIFT;
+    Index = AllocationSize >> HEAP_ENTRY_SHIFT;
 
     /* Acquire the lock if necessary */
     if (!(Flags & HEAP_NO_SERIALIZE))