Преглед на файлове

Fix missing checks for platform mismatch

The native access functions for monitor objects did not check whether
the correct platform was initialized and would return invalid handles if
it was not.
Camilla Löwy преди 1 година
родител
ревизия
86d7bcb124
променени са 4 файла, в които са добавени 42 реда и са изтрити 0 реда
  1. 7 0
      src/cocoa_monitor.m
  2. 14 0
      src/win32_monitor.c
  3. 7 0
      src/wl_monitor.c
  4. 14 0
      src/x11_monitor.c

+ 7 - 0
src/cocoa_monitor.m

@@ -622,6 +622,13 @@ GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* handle)
 {
 {
     _GLFWmonitor* monitor = (_GLFWmonitor*) handle;
     _GLFWmonitor* monitor = (_GLFWmonitor*) handle;
     _GLFW_REQUIRE_INIT_OR_RETURN(kCGNullDirectDisplay);
     _GLFW_REQUIRE_INIT_OR_RETURN(kCGNullDirectDisplay);
+
+    if (_glfw.platform.platformID != GLFW_PLATFORM_COCOA)
+    {
+        _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "Cocoa: Platform not initialized");
+        return kCGNullDirectDisplay;
+    }
+
     return monitor->ns.displayID;
     return monitor->ns.displayID;
 }
 }
 
 

+ 14 - 0
src/win32_monitor.c

@@ -535,6 +535,13 @@ GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* handle)
 {
 {
     _GLFWmonitor* monitor = (_GLFWmonitor*) handle;
     _GLFWmonitor* monitor = (_GLFWmonitor*) handle;
     _GLFW_REQUIRE_INIT_OR_RETURN(NULL);
     _GLFW_REQUIRE_INIT_OR_RETURN(NULL);
+
+    if (_glfw.platform.platformID != GLFW_PLATFORM_WIN32)
+    {
+        _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "Win32: Platform not initialized");
+        return NULL;
+    }
+
     return monitor->win32.publicAdapterName;
     return monitor->win32.publicAdapterName;
 }
 }
 
 
@@ -542,6 +549,13 @@ GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* handle)
 {
 {
     _GLFWmonitor* monitor = (_GLFWmonitor*) handle;
     _GLFWmonitor* monitor = (_GLFWmonitor*) handle;
     _GLFW_REQUIRE_INIT_OR_RETURN(NULL);
     _GLFW_REQUIRE_INIT_OR_RETURN(NULL);
+
+    if (_glfw.platform.platformID != GLFW_PLATFORM_WIN32)
+    {
+        _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "Win32: Platform not initialized");
+        return NULL;
+    }
+
     return monitor->win32.publicDisplayName;
     return monitor->win32.publicDisplayName;
 }
 }
 
 

+ 7 - 0
src/wl_monitor.c

@@ -259,6 +259,13 @@ GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* handle)
 {
 {
     _GLFWmonitor* monitor = (_GLFWmonitor*) handle;
     _GLFWmonitor* monitor = (_GLFWmonitor*) handle;
     _GLFW_REQUIRE_INIT_OR_RETURN(NULL);
     _GLFW_REQUIRE_INIT_OR_RETURN(NULL);
+
+    if (_glfw.platform.platformID != GLFW_PLATFORM_WAYLAND)
+    {
+        _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "Wayland: Platform not initialized");
+        return NULL;
+    }
+
     return monitor->wl.output;
     return monitor->wl.output;
 }
 }
 
 

+ 14 - 0
src/x11_monitor.c

@@ -604,6 +604,13 @@ GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* handle)
 {
 {
     _GLFWmonitor* monitor = (_GLFWmonitor*) handle;
     _GLFWmonitor* monitor = (_GLFWmonitor*) handle;
     _GLFW_REQUIRE_INIT_OR_RETURN(None);
     _GLFW_REQUIRE_INIT_OR_RETURN(None);
+
+    if (_glfw.platform.platformID != GLFW_PLATFORM_X11)
+    {
+        _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "X11: Platform not initialized");
+        return None;
+    }
+
     return monitor->x11.crtc;
     return monitor->x11.crtc;
 }
 }
 
 
@@ -611,6 +618,13 @@ GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* handle)
 {
 {
     _GLFWmonitor* monitor = (_GLFWmonitor*) handle;
     _GLFWmonitor* monitor = (_GLFWmonitor*) handle;
     _GLFW_REQUIRE_INIT_OR_RETURN(None);
     _GLFW_REQUIRE_INIT_OR_RETURN(None);
+
+    if (_glfw.platform.platformID != GLFW_PLATFORM_X11)
+    {
+        _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "X11: Platform not initialized");
+        return None;
+    }
+
     return monitor->x11.output;
     return monitor->x11.output;
 }
 }