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