Преглед изворни кода

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

Sam Lantinga пре 10 година
родитељ
комит
08ce12c4e3
1 измењених фајлова са 6 додато и 3 уклоњено
  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)) {