tdevdraw: fix cocoa metal _flushmemscreen for invalid rectangles (#240) - plan9port - [fork] Plan 9 from user space
(HTM) git clone git://src.adamsgaard.dk/plan9port
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 0308e1f010cd8650840fa0ceee3b342229982420
(DIR) parent 4d3c36cce4d70dfd88bd5e782e86141775577d30
(HTM) Author: Xiao-Yong <jinxiaoyong@gmail.com>
Date: Fri, 5 Apr 2019 12:44:47 -0600
devdraw: fix cocoa metal _flushmemscreen for invalid rectangles (#240)
It is possible to receive multiple screen resize events, and resizeimg
would be called for different sizes, before _flushmemscreen actually
gets called with rectangle sizes different from the most recent
resizeimg call. The size mismatch would trigger illegal memory
access inside _flushmemscreen.
This commit protects _flushmemscreen by returning early if the requested
rectangle is outside of the current texture rectangle.
Diffstat:
M src/cmd/devdraw/cocoa-screen-metal… | 4 ++++
1 file changed, 4 insertions(+), 0 deletions(-)
---
(DIR) diff --git a/src/cmd/devdraw/cocoa-screen-metal.m b/src/cmd/devdraw/cocoa-screen-metal.m
t@@ -987,6 +987,10 @@ void
_flushmemscreen(Rectangle r)
{
LOG(@"_flushmemscreen(%d,%d,%d,%d)", r.min.x, r.min.y, Dx(r), Dy(r));
+ if(!rectinrect(r, Rect(0, 0, texture.width, texture.height))){
+ LOG(@"Rectangle is out of bounds, return.");
+ return;
+ }
@autoreleasepool{
[texture