Pārlūkot izejas kodu

Fixed divide by zero if the application has run out of GDI handles and is trying to show an error dialog

Sam Lantinga 11 gadi atpakaļ
vecāks
revīzija
08ce12c4e3
1 mainītis faili ar 6 papildinājumiem un 3 dzēšanām
  1. 6 3
      src/video/windows/SDL_windowsmessagebox.c

+ 6 - 3
src/video/windows/SDL_windowsmessagebox.c

@@ -297,9 +297,12 @@ static WIN_DialogData *CreateDialogData(int w, int h, const char *caption)
 
 
         /* Font size - convert to logical font size for dialog parameter. */
         /* Font size - convert to logical font size for dialog parameter. */
         {
         {
-            HDC ScreenDC = GetDC(0);
-            WordToPass = (WORD)(-72 * NCM.lfMessageFont.lfHeight / GetDeviceCaps(ScreenDC, LOGPIXELSY));
-            ReleaseDC(0, ScreenDC);
+            HDC ScreenDC = GetDC(NULL);
+            int LogicalPixelsY = GetDeviceCaps(ScreenDC, LOGPIXELSY);
+            if (!LogicalPixelsY) /* This can happen if the application runs out of GDI handles */
+                LogicalPixelsY = 72;
+            WordToPass = (WORD)(-72 * NCM.lfMessageFont.lfHeight / LogicalPixelsY);
+            ReleaseDC(NULL, ScreenDC);
         }
         }
 
 
         if (!AddDialogData(dialog, &WordToPass, 2)) {
         if (!AddDialogData(dialog, &WordToPass, 2)) {