Compare commits

...

3 Commits

Author SHA1 Message Date
Luis G. Torres
0462989928
Merge c5e83f1b6a into ac10768495 2025-07-20 00:29:21 +08:00
Camilla Löwy
ac10768495 Wayland: Fix memory leaks in data offer reading
The buffer storing the contents of the data offer being read could leak
if buffer reallocation or reading from the pipe failed.
2025-07-18 12:31:07 +02:00
Luis Torres
c5e83f1b6a Cocoa: Fix glfwGetFramebufferSize() for non-retina windows.
On some Macs, glfwGetFramebufferSize() would return a high-resolution result even when the GL framebuffer was not created in high-resolution (retina) mode. This is because the screen-to-pixel conversion function, convertRectToBacking(), doesn't take into account whether the framebuffer was created in high-resolution mode; it will always return a high-resolution result if the device is high-res.

Now we check whether the framebuffer is indeed in retina mode before using the convertRectToBacking() function.

Fixes #2478
2025-02-28 13:25:46 -08:00
4 changed files with 23 additions and 5 deletions

View File

@ -263,6 +263,7 @@ video tutorials.
- Jared Tiala
- Sergey Tikhomirov
- Arthur Tombs
- Luis Torres
- TronicLabs
- Ioannis Tsakpinis
- Samuli Tuomola

View File

@ -128,11 +128,14 @@ information on what to include when reporting a bug.
- [Win32] Removed support for Windows XP and Vista (#2505)
- [Cocoa] Added `QuartzCore` framework as link-time dependency
- [Cocoa] Removed support for OS X 10.10 Yosemite and earlier (#2506)
- [Cocoa] Bugfix: glfwGetFramebufferSize() now returns correct values for
non-retina windows for some Macs. (#2478)
- [Wayland] Bugfix: The fractional scaling related objects were not destroyed
- [Wayland] Bugfix: `glfwInit` would segfault on compositor with no seat (#2517)
- [Wayland] Bugfix: A drag entering a non-GLFW surface could cause a segfault
- [Wayland] Bugfix: Ignore key repeat events when no window has keyboard focus (#2727)
- [Wayland] Bugfix: Reset key repeat timer when window destroyed (#2741,#2727)
- [Wayland] Bugfix: Memory would leak if reading a data offer failed midway
- [X11] Bugfix: Running without a WM could trigger an assert (#2593,#2601,#2631)
- [Null] Added Vulkan 'window' surface creation via `VK_EXT_headless_surface`
- [Null] Added EGL context creation on Mesa via `EGL_MESA_platform_surfaceless`

View File

@ -1133,12 +1133,24 @@ void _glfwGetFramebufferSizeCocoa(_GLFWwindow* window, int* width, int* height)
@autoreleasepool {
const NSRect contentRect = [window->ns.view frame];
const NSRect fbRect = [window->ns.view convertRectToBacking:contentRect];
if (width)
*width = (int) fbRect.size.width;
if (height)
*height = (int) fbRect.size.height;
if (window->ns.scaleFramebuffer)
{
const NSRect fbRect = [window->ns.view convertRectToBacking:contentRect];
if (width)
*width = (int) fbRect.size.width;
if (height)
*height = (int) fbRect.size.height;
}
else
{
if (width)
*width = (int) contentRect.size.width;
if (height)
*height = (int) contentRect.size.height;
}
} // autoreleasepool
}

View File

@ -1333,6 +1333,7 @@ static char* readDataOfferAsString(struct wl_data_offer* offer, const char* mime
if (!longer)
{
_glfwInputError(GLFW_OUT_OF_MEMORY, NULL);
_glfw_free(string);
close(fds[0]);
return NULL;
}
@ -1352,6 +1353,7 @@ static char* readDataOfferAsString(struct wl_data_offer* offer, const char* mime
_glfwInputError(GLFW_PLATFORM_ERROR,
"Wayland: Failed to read from data offer pipe: %s",
strerror(errno));
_glfw_free(string);
close(fds[0]);
return NULL;
}