[GDI32] Prevent double initialization in GdiProcessSetup
authorMark Jansen <mark.jansen@reactos.org>
Fri, 9 Oct 2020 12:28:32 +0000 (14:28 +0200)
committerMark Jansen <mark.jansen@reactos.org>
Sun, 11 Oct 2020 14:30:39 +0000 (16:30 +0200)
Found with Application Verifier :)

win32ss/gdi/gdi32/main/dllmain.c

index b59dfbe..322fc15 100644 (file)
@@ -4,6 +4,7 @@
 
 #include <precomp.h>
 
+static BOOL gbInitialized = FALSE;
 extern HGDIOBJ stock_objects[];
 BOOL SetStockObjects = FALSE;
 PDEVCAPS GdiDevCaps = NULL;
@@ -40,18 +41,22 @@ VOID
 WINAPI
 GdiProcessSetup(VOID)
 {
-    hProcessHeap = GetProcessHeap();
-
-    /* map the gdi handle table to user space */
-    GdiHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
-    GdiSharedHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
-    GdiDevCaps = &GdiSharedHandleTable->DevCaps;
-    CurrentProcessId = NtCurrentTeb()->ClientId.UniqueProcess;
-    GDI_BatchLimit = (DWORD) NtCurrentTeb()->ProcessEnvironmentBlock->GdiDCAttributeList;
-    GdiHandleCache = (PGDIHANDLECACHE)NtCurrentTeb()->ProcessEnvironmentBlock->GdiHandleBuffer;
-    RtlInitializeCriticalSection(&semLocal);
-    InitializeCriticalSection(&gcsClientObjLinks);
-    GdiInitializeLanguagePack(0);
+    if (!gbInitialized)
+    {
+        gbInitialized = TRUE;
+        hProcessHeap = GetProcessHeap();
+
+        /* map the gdi handle table to user space */
+        GdiHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
+        GdiSharedHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
+        GdiDevCaps = &GdiSharedHandleTable->DevCaps;
+        CurrentProcessId = NtCurrentTeb()->ClientId.UniqueProcess;
+        GDI_BatchLimit = (DWORD) NtCurrentTeb()->ProcessEnvironmentBlock->GdiDCAttributeList;
+        GdiHandleCache = (PGDIHANDLECACHE)NtCurrentTeb()->ProcessEnvironmentBlock->GdiHandleBuffer;
+        RtlInitializeCriticalSection(&semLocal);
+        InitializeCriticalSection(&gcsClientObjLinks);
+        GdiInitializeLanguagePack(0);
+    }
 }
 
 VOID